summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan.moors@typesafe.com>2013-07-25 13:54:32 -0700
committerAdriaan Moors <adriaan.moors@typesafe.com>2013-07-25 13:54:32 -0700
commitfd9fa7233052698595f23af4a233ae6e13e13758 (patch)
tree2cfcbb0bab76dcd662feab074246cee49d85ed11
parentfc4b464faeb43c3e2917b11a95c4f84481c443f7 (diff)
parentc34b048c2f35ae48dad50cf1b870c8c6dde71fd9 (diff)
downloadscala-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.scala2
-rw-r--r--test/files/run/t7569.check12
-rw-r--r--test/files/run/t7569.scala19
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 _ =>
+ }
+ }
+ }
+}