diff options
author | Adriaan Moors <adriaan.moors@typesafe.com> | 2013-07-25 13:54:32 -0700 |
---|---|---|
committer | Adriaan Moors <adriaan.moors@typesafe.com> | 2013-07-25 13:54:32 -0700 |
commit | fd9fa7233052698595f23af4a233ae6e13e13758 (patch) | |
tree | 2cfcbb0bab76dcd662feab074246cee49d85ed11 | |
parent | fc4b464faeb43c3e2917b11a95c4f84481c443f7 (diff) | |
parent | c34b048c2f35ae48dad50cf1b870c8c6dde71fd9 (diff) | |
download | scala-fd9fa7233052698595f23af4a233ae6e13e13758.tar.gz scala-fd9fa7233052698595f23af4a233ae6e13e13758.tar.bz2 scala-fd9fa7233052698595f23af4a233ae6e13e13758.zip |
Merge pull request #2769 from paulp/pr/backport-272b165a57
SI-7569 Fix end position in PostfixSelect tree
-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 e92c3e1654..1412bff0ab 100644 --- a/src/compiler/scala/tools/nsc/ast/parser/TreeBuilder.scala +++ b/src/compiler/scala/tools/nsc/ast/parser/TreeBuilder.scala @@ -248,7 +248,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..aade96d233 --- /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-2,offset=41 A.super.<init>() +source-newSource1.scala,line-2,offset=41 A.super.<init> +source-newSource1.scala,line-2,offset=41 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 _ => + } + } + } +} |