diff options
author | Miles Sabin <miles@milessabin.com> | 2009-08-16 17:24:37 +0000 |
---|---|---|
committer | Miles Sabin <miles@milessabin.com> | 2009-08-16 17:24:37 +0000 |
commit | cdfb6bf18dbdc35c03f7d60310ca50c437cc77ff (patch) | |
tree | 3a99b44f4d9e3118d2dcf006779e05fe0b0a6005 /src | |
parent | f4d0095bf538cc90bcf465fd576207db7e264c87 (diff) | |
download | scala-cdfb6bf18dbdc35c03f7d60310ca50c437cc77ff.tar.gz scala-cdfb6bf18dbdc35c03f7d60310ca50c437cc77ff.tar.bz2 scala-cdfb6bf18dbdc35c03f7d60310ca50c437cc77ff.zip |
Improvements in positions assigned to expresssi...
Improvements in positions assigned to expresssions using assignment
operators.
Diffstat (limited to 'src')
-rwxr-xr-x | src/compiler/scala/tools/nsc/ast/parser/Parsers.scala | 3 | ||||
-rw-r--r-- | src/compiler/scala/tools/nsc/ast/parser/TreeBuilder.scala | 6 | ||||
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/Typers.scala | 2 |
3 files changed, 6 insertions, 5 deletions
diff --git a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala index da233feab3..bb0fa89b29 100755 --- a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala +++ b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala @@ -538,8 +538,9 @@ self => leftAssoc && prec == precedence(opstack.head.operator))) { val opinfo = opstack.head opstack = opstack.tail + val opPos = rangePos(opinfo.operand.pos.source, opinfo.offset, opinfo.offset, opinfo.offset+opinfo.operator.length) top = atPos(opinfo.operand.pos.startOrPoint, opinfo.offset) { - makeBinop(isExpr, opinfo.operand, opinfo.operator, top) + makeBinop(isExpr, opinfo.operand, opinfo.operator, top, opPos) } } top diff --git a/src/compiler/scala/tools/nsc/ast/parser/TreeBuilder.scala b/src/compiler/scala/tools/nsc/ast/parser/TreeBuilder.scala index fc18cfb195..a8ecf9aab3 100644 --- a/src/compiler/scala/tools/nsc/ast/parser/TreeBuilder.scala +++ b/src/compiler/scala/tools/nsc/ast/parser/TreeBuilder.scala @@ -144,19 +144,19 @@ abstract class TreeBuilder { } /** Create tree representing (unencoded) binary operation expression or pattern. */ - def makeBinop(isExpr: Boolean, left: Tree, op: Name, right: Tree): Tree = { + def makeBinop(isExpr: Boolean, left: Tree, op: Name, right: Tree, opPos: Position): Tree = { val arguments = right match { case Parens(args) => args case _ => List(right) } if (isExpr) { if (treeInfo.isLeftAssoc(op)) { - Apply(Select(stripParens(left), op.encode), arguments) + Apply(atPos(left.pos union opPos) { Select(stripParens(left), op.encode) }, arguments) } else { val x = freshName() Block( List(ValDef(Modifiers(SYNTHETIC), x, TypeTree(), stripParens(left))), - Apply(Select(stripParens(right), op.encode), List(Ident(x)))) + Apply(atPos(right.pos union opPos) { Select(stripParens(right), op.encode) }, List(Ident(x)))) } } else { Apply(Ident(op.encode), stripParens(left) :: arguments) diff --git a/src/compiler/scala/tools/nsc/typechecker/Typers.scala b/src/compiler/scala/tools/nsc/typechecker/Typers.scala index ff200b22fd..a2fcd28da1 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Typers.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Typers.scala @@ -3071,7 +3071,7 @@ trait Typers { self: Analyzer => case Select(qualqual, vname) => gen.evalOnce(qualqual, context.owner, context.unit) { qq => val qq1 = qq() - mkAssign(Select(qq1, vname) setPos qq1.pos) + mkAssign(Select(qq1, vname) setPos qual.pos) } case Apply(Select(table, nme.apply), indices) => gen.evalOnceAll(table :: indices, context.owner, context.unit) { ts => |