diff options
author | Eugene Burmako <xeno.by@gmail.com> | 2013-02-16 23:42:09 +0100 |
---|---|---|
committer | Eugene Burmako <xeno.by@gmail.com> | 2013-02-17 00:11:54 +0100 |
commit | e2a17d9c8234bf620ba0109f9ab4bae822c20bf0 (patch) | |
tree | f1ff6a3a618866b9facdaadc31949ae0bc88bb22 /test/files/run | |
parent | 466fc670a38836dfb81d75f72d46ddcaa12bc3bb (diff) | |
download | scala-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.check | 1 | ||||
-rw-r--r-- | test/files/run/resetattrs-this.scala | 11 |
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 |