summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMiles Sabin <miles@milessabin.com>2009-08-16 17:24:37 +0000
committerMiles Sabin <miles@milessabin.com>2009-08-16 17:24:37 +0000
commitcdfb6bf18dbdc35c03f7d60310ca50c437cc77ff (patch)
tree3a99b44f4d9e3118d2dcf006779e05fe0b0a6005 /src
parentf4d0095bf538cc90bcf465fd576207db7e264c87 (diff)
downloadscala-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-xsrc/compiler/scala/tools/nsc/ast/parser/Parsers.scala3
-rw-r--r--src/compiler/scala/tools/nsc/ast/parser/TreeBuilder.scala6
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Typers.scala2
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 =>