diff options
author | François Garillot <francois@garillot.net> | 2013-06-21 13:49:37 +0200 |
---|---|---|
committer | François Garillot <francois@garillot.net> | 2013-06-24 12:02:46 +0200 |
commit | 272b165a57d39529a9eb5996bbba64e0c368e43e (patch) | |
tree | a984685d07f1e439e3cc9bdb6ce1ca6b8345b4ac | |
parent | b29e515205581d58d239464daadf37f0f1537519 (diff) | |
download | scala-272b165a57d39529a9eb5996bbba64e0c368e43e.tar.gz scala-272b165a57d39529a9eb5996bbba64e0c368e43e.tar.bz2 scala-272b165a57d39529a9eb5996bbba64e0c368e43e.zip |
SI-7569 Fix end position in PostfixSelect tree
introduced in 5b54681: the end position of Postfix operators should
take the operator length into account.
review by @som-snytt
-rw-r--r-- | src/compiler/scala/tools/nsc/ast/parser/TreeBuilder.scala | 2 | ||||
-rw-r--r-- | test/files/run/t7569.check | 12 | ||||
-rw-r--r-- | test/files/run/t7569.scala | 19 |
3 files changed, 32 insertions, 1 deletions
diff --git a/src/compiler/scala/tools/nsc/ast/parser/TreeBuilder.scala b/src/compiler/scala/tools/nsc/ast/parser/TreeBuilder.scala index ec4e932aae..0ef71fa1b5 100644 --- a/src/compiler/scala/tools/nsc/ast/parser/TreeBuilder.scala +++ b/src/compiler/scala/tools/nsc/ast/parser/TreeBuilder.scala @@ -245,7 +245,7 @@ abstract class TreeBuilder { /** Tree for `od op`, start is start0 if od.pos is borked. */ def makePostfixSelect(start0: Int, end: Int, od: Tree, op: Name): Tree = { val start = if (od.pos.isDefined) od.pos.startOrPoint else start0 - atPos(r2p(start, end, end)) { new PostfixSelect(od, op.encode) } + atPos(r2p(start, end, end + op.length)) { new PostfixSelect(od, op.encode) } } /** A type tree corresponding to (possibly unary) intersection type */ diff --git a/test/files/run/t7569.check b/test/files/run/t7569.check new file mode 100644 index 0000000000..98513c3ab2 --- /dev/null +++ b/test/files/run/t7569.check @@ -0,0 +1,12 @@ +source-newSource1.scala,line-3,offset=49 A.this.one +source-newSource1.scala,line-3,offset=49 A.this +source-newSource1.scala,line-4,offset=67 A.super.<init>() +source-newSource1.scala,line-4,offset=67 A.super.<init> +source-newSource1.scala,line-4,offset=67 this +source-newSource1.scala,line-3,offset=49 A.this.one +source-newSource1.scala,line-3,offset=49 A.this +RangePosition(newSource1.scala, 55, 57, 65) scala.Int.box(1).toString() +RangePosition(newSource1.scala, 55, 57, 65) scala.Int.box(1).toString +RangePosition(newSource1.scala, 55, 55, 56) scala.Int.box(1) +NoPosition scala.Int.box +NoPosition scala.Int diff --git a/test/files/run/t7569.scala b/test/files/run/t7569.scala new file mode 100644 index 0000000000..b1b1443a18 --- /dev/null +++ b/test/files/run/t7569.scala @@ -0,0 +1,19 @@ +import scala.tools.partest._ +object Test extends CompilerTest { + import global._ + override def extraSettings = super.extraSettings + " -Yrangepos" + override def sources = List( + """|import scala.language.postfixOps + |class A { + | val one = 1 toString + |}""".stripMargin + ) + def check(source: String, unit: CompilationUnit) { + for (ClassDef(_, _, _, Template(_, _, stats)) <- unit.body ; stat <- stats ; t <- stat) { + t match { + case _: Select | _ : Apply | _:This => println("%-15s %s".format(t.pos.toString, t)) + case _ => + } + } + } +} |