summaryrefslogtreecommitdiff
path: root/test/files/run
diff options
context:
space:
mode:
authorEugene Burmako <xeno.by@gmail.com>2013-02-16 23:42:09 +0100
committerEugene Burmako <xeno.by@gmail.com>2013-02-17 00:11:54 +0100
commite2a17d9c8234bf620ba0109f9ab4bae822c20bf0 (patch)
treef1ff6a3a618866b9facdaadc31949ae0bc88bb22 /test/files/run
parent466fc670a38836dfb81d75f72d46ddcaa12bc3bb (diff)
downloadscala-e2a17d9c8234bf620ba0109f9ab4bae822c20bf0.tar.gz
scala-e2a17d9c8234bf620ba0109f9ab4bae822c20bf0.tar.bz2
scala-e2a17d9c8234bf620ba0109f9ab4bae822c20bf0.zip
resetAttrs now always erases This.tpe
The symbol of This, if it points to a package class, isn't touched, just as usual, so that our Select(Select(Select(...))) => This(...) optimization works fine with attr reset. However the tpe is now erased, so that subsequent reflective compilation doesn't spuriously fail when seeing that some subtrees of a tree being compiled are typed. Erasing the tpe doesn't pose even a tiniest problem, because, as it can be seen in typedThis, type is trivially reconstructed from the symbol.
Diffstat (limited to 'test/files/run')
-rw-r--r--test/files/run/resetattrs-this.check1
-rw-r--r--test/files/run/resetattrs-this.scala11
2 files changed, 12 insertions, 0 deletions
diff --git a/test/files/run/resetattrs-this.check b/test/files/run/resetattrs-this.check
new file mode 100644
index 0000000000..27ba77ddaf
--- /dev/null
+++ b/test/files/run/resetattrs-this.check
@@ -0,0 +1 @@
+true
diff --git a/test/files/run/resetattrs-this.scala b/test/files/run/resetattrs-this.scala
new file mode 100644
index 0000000000..12afa3d712
--- /dev/null
+++ b/test/files/run/resetattrs-this.scala
@@ -0,0 +1,11 @@
+import scala.reflect.runtime.universe._
+import scala.reflect.runtime.{currentMirror => cm}
+import scala.tools.reflect.ToolBox
+
+object Test extends App {
+ val tb = cm.mkToolBox()
+ val tree = Select(This(cm.staticPackage("scala").moduleClass), newTermName("Predef"))
+ val ttree = tb.typeCheck(tree)
+ val rttree = tb.resetAllAttrs(ttree)
+ println(tb.eval(rttree) == Predef)
+} \ No newline at end of file