Skip to content

Commit 303050c

Browse files
committed
Drop TreeInfo.isLeftAssoc
Use NameOps#isRightAssocOperatorName instead
1 parent 6592467 commit 303050c

File tree

8 files changed

+15
-24
lines changed

8 files changed

+15
-24
lines changed

compiler/src/dotty/tools/dotc/ast/Desugar.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -917,7 +917,7 @@ object desugar {
917917
name = mdef.name.toExtensionName,
918918
tparams = ext.tparams ++ mdef.tparams,
919919
vparamss = mdef.vparamss match
920-
case vparams1 :: vparamss1 if !isLeftAssoc(mdef.name) =>
920+
case vparams1 :: vparamss1 if mdef.name.isRightAssocOperatorName =>
921921
vparams1 :: ext.vparamss ::: vparamss1
922922
case _ =>
923923
ext.vparamss ++ mdef.vparamss
@@ -1248,10 +1248,10 @@ object desugar {
12481248
case _ =>
12491249
Apply(sel, arg :: Nil)
12501250

1251-
if (isLeftAssoc(op.name))
1252-
makeOp(left, right, Span(left.span.start, op.span.end, op.span.start))
1253-
else
1251+
if op.name.isRightAssocOperatorName then
12541252
makeOp(right, left, Span(op.span.start, right.span.end))
1253+
else
1254+
makeOp(left, right, Span(left.span.start, op.span.end, op.span.start))
12551255
}
12561256

12571257
/** Translate tuple expressions of arity <= 22

compiler/src/dotty/tools/dotc/ast/Positioned.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import util.Spans._
66
import util.{SourceFile, NoSource, SourcePosition, SrcPos}
77
import core.Contexts._
88
import core.Decorators._
9+
import core.NameOps._
910
import core.Flags.{JavaDefined, Extension}
1011
import core.StdNames.nme
1112
import ast.Trees.mods
@@ -214,7 +215,7 @@ abstract class Positioned(implicit @constructorOnly src: SourceFile) extends Src
214215
check(tree.vparamss)
215216
case tree: DefDef if tree.mods.is(Extension) =>
216217
tree.vparamss match {
217-
case vparams1 :: vparams2 :: rest if !isLeftAssoc(tree.name) =>
218+
case vparams1 :: vparams2 :: rest if tree.name.isRightAssocOperatorName =>
218219
check(tree.tparams)
219220
check(vparams2)
220221
check(vparams1)

compiler/src/dotty/tools/dotc/ast/TreeInfo.scala

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -184,9 +184,6 @@ trait TreeInfo[T >: Untyped <: Type] { self: Trees.Instance[T] =>
184184
case _ => false
185185
}
186186

187-
/** Is name a left-associative operator? */
188-
def isLeftAssoc(operator: Name): Boolean = !operator.isEmpty && (operator.toSimpleName.last != ':')
189-
190187
/** Is this argument node of the form <expr> : _*, or is it a reference to
191188
* such an argument ? The latter case can happen when an argument is lifted.
192189
*/

compiler/src/dotty/tools/dotc/ast/Trees.scala

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -757,11 +757,6 @@ object Trees {
757757
assert(tpt != genericEmptyTree)
758758
def unforced: LazyTree[T] = preRhs
759759
protected def force(x: Tree[T @uncheckedVariance]): Unit = preRhs = x
760-
761-
override def disableOverlapChecks = rawMods.is(Extension)
762-
// disable order checks for extension methods as long as we parse
763-
// type parameters both before and after the leading parameter section.
764-
// TODO drop this once syntax of type parameters has settled.
765760
}
766761

767762
/** mods class name template or

compiler/src/dotty/tools/dotc/parsing/Parsers.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -941,7 +941,7 @@ object Parsers {
941941
var opStack: List[OpInfo] = Nil
942942

943943
def checkAssoc(offset: Token, op1: Name, op2: Name, op2LeftAssoc: Boolean): Unit =
944-
if (isLeftAssoc(op1) != op2LeftAssoc)
944+
if (op1.isRightAssocOperatorName == op2LeftAssoc)
945945
syntaxError(MixedLeftAndRightAssociativeOps(op1, op2, op2LeftAssoc), offset)
946946

947947
def reduceStack(base: List[OpInfo], top: Tree, prec: Int, leftAssoc: Boolean, op2: Name, isType: Boolean): Tree = {
@@ -981,7 +981,7 @@ object Parsers {
981981
def recur(top: Tree): Tree =
982982
if (isIdent && isOperator) {
983983
val op = if (isType) typeIdent() else termIdent()
984-
val top1 = reduceStack(base, top, precedence(op.name), isLeftAssoc(op.name), op.name, isType)
984+
val top1 = reduceStack(base, top, precedence(op.name), !op.name.isRightAssocOperatorName, op.name, isType)
985985
opStack = OpInfo(top1, op, in.offset) :: opStack
986986
colonAtEOLOpt()
987987
newLineOptWhenFollowing(canStartOperand)
@@ -3330,7 +3330,7 @@ object Parsers {
33303330
typeParamClause(ParamOwner.Def)
33313331
else leadingTparams
33323332
val vparamss = paramClauses() match
3333-
case rparams :: rparamss if leadingVparamss.nonEmpty && !isLeftAssoc(ident.name) =>
3333+
case rparams :: rparamss if leadingVparamss.nonEmpty && ident.name.isRightAssocOperatorName =>
33343334
rparams :: leadingVparamss ::: rparamss
33353335
case rparamss =>
33363336
leadingVparamss ::: rparamss

compiler/src/dotty/tools/dotc/printing/RefinedPrinter.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -793,7 +793,7 @@ class RefinedPrinter(_ctx: Context) extends PlainPrinter(_ctx) {
793793
val (prefix, vparamss) =
794794
if isExtension then
795795
val (leadingParams, otherParamss) = (tree.vparamss: @unchecked) match
796-
case vparams1 :: vparams2 :: rest if !isLeftAssoc(tree.name) =>
796+
case vparams1 :: vparams2 :: rest if tree.name.isRightAssocOperatorName =>
797797
(vparams2, vparams1 :: rest)
798798
case vparams1 :: rest =>
799799
(vparams1, rest)

compiler/src/dotty/tools/dotc/typer/RefChecks.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1620,7 +1620,7 @@ class RefChecks extends MiniPhase { thisPhase =>
16201620
private def checkByNameRightAssociativeDef(tree: DefDef) {
16211621
tree match {
16221622
case DefDef(_, name, _, params :: _, _, _) =>
1623-
if (settings.lint && !treeInfo.isLeftAssoc(name.decodedName) && params.exists(p => isByName(p.symbol)))
1623+
if (settings.lint && name.decodedName.isRightAssocOperatorName && params.exists(p => isByName(p.symbol)))
16241624
unit.warning(tree.pos,
16251625
"by-name parameters will be evaluated eagerly when called as a right-associative infix operator. For more details, see SI-1980.")
16261626
case _ =>

compiler/src/dotty/tools/dotc/typer/Typer.scala

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -442,7 +442,7 @@ class Typer extends Namer
442442
// cyclic references.
443443
if (name == nme.ROOTPKG)
444444
return tree.withType(defn.RootPackage.termRef)
445-
445+
446446
val rawType = {
447447
val saved1 = unimported
448448
val saved2 = foundUnderScala2
@@ -2336,20 +2336,18 @@ class Typer extends Namer
23362336
typedUnApply(cpy.Apply(tree)(op, l :: r :: Nil), pt)
23372337
else {
23382338
val app = typedApply(desugar.binop(l, op, r), pt)
2339-
if (untpd.isLeftAssoc(op.name)) app
2340-
else {
2339+
if op.name.isRightAssocOperatorName then
23412340
val defs = new mutable.ListBuffer[Tree]
2342-
def lift(app: Tree): Tree = (app: @unchecked) match {
2341+
def lift(app: Tree): Tree = (app: @unchecked) match
23432342
case Apply(fn, args) =>
23442343
if (app.tpe.isError) app
23452344
else tpd.cpy.Apply(app)(fn, LiftImpure.liftArgs(defs, fn.tpe, args))
23462345
case Assign(lhs, rhs) =>
23472346
tpd.cpy.Assign(app)(lhs, lift(rhs))
23482347
case Block(stats, expr) =>
23492348
tpd.cpy.Block(app)(stats, lift(expr))
2350-
}
23512349
wrapDefs(defs, lift(app))
2352-
}
2350+
else app
23532351
}
23542352
checkValidInfix(tree, result.symbol)
23552353
result

0 commit comments

Comments
 (0)