summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugene Burmako <xeno.by@gmail.com>2012-02-02 15:29:55 +0100
committerEugene Burmako <xeno.by@gmail.com>2012-02-02 15:29:55 +0100
commit363f8af6a8c157485a644d00d75e2df10e71e661 (patch)
tree2cd691f5966c0c823f85abc94f8eef0057f676ff
parentd940371bd50098c4146e52941880ccdbcb4ea47a (diff)
downloadscala-363f8af6a8c157485a644d00d75e2df10e71e661.tar.gz
scala-363f8af6a8c157485a644d00d75e2df10e71e661.tar.bz2
scala-363f8af6a8c157485a644d00d75e2df10e71e661.zip
Fixes reifyThis
-rw-r--r--src/compiler/scala/reflect/internal/StdNames.scala1
-rw-r--r--src/compiler/scala/reflect/internal/Trees.scala2
-rw-r--r--src/compiler/scala/tools/nsc/transform/LiftCode.scala15
-rw-r--r--src/library/scala/reflect/api/Trees.scala3
-rw-r--r--test/files/run/reify_closure1.check (renamed from test/pending/run/reify_closure1.check)0
-rw-r--r--test/files/run/reify_closure1.scala (renamed from test/pending/run/reify_closure1.scala)0
-rw-r--r--test/files/run/reify_closure2a.check (renamed from test/pending/run/reify_closure2a.check)0
-rw-r--r--test/files/run/reify_closure2a.scala (renamed from test/pending/run/reify_closure2a.scala)0
-rw-r--r--test/files/run/reify_closure3a.check (renamed from test/pending/run/reify_closure3a.check)0
-rw-r--r--test/files/run/reify_closure3a.scala (renamed from test/pending/run/reify_closure3a.scala)0
-rw-r--r--test/files/run/reify_closure4a.check (renamed from test/pending/run/reify_closure4a.check)0
-rw-r--r--test/files/run/reify_closure4a.scala (renamed from test/pending/run/reify_closure4a.scala)0
-rw-r--r--test/files/run/reify_closure5a.check (renamed from test/pending/run/reify_closure5a.check)0
-rw-r--r--test/files/run/reify_closure5a.scala (renamed from test/pending/run/reify_closure5a.scala)0
-rw-r--r--test/files/run/reify_closure6.check (renamed from test/pending/run/reify_closure6.check)2
-rw-r--r--test/files/run/reify_closure6.scala (renamed from test/pending/run/reify_closure6.scala)2
-rw-r--r--test/files/run/reify_closure7.check (renamed from test/pending/run/reify_closure7.check)0
-rw-r--r--test/files/run/reify_closure7.scala (renamed from test/pending/run/reify_closure7.scala)0
-rw-r--r--test/files/run/reify_closure8a.check (renamed from test/pending/run/reify_closure8a.check)0
-rw-r--r--test/files/run/reify_closure8a.scala (renamed from test/pending/run/reify_closure8a.scala)0
-rw-r--r--test/files/run/reify_closures10.check (renamed from test/pending/run/reify_closures10.check)0
-rw-r--r--test/files/run/reify_closures10.scala (renamed from test/pending/run/reify_closures10.scala)0
-rw-r--r--test/files/run/reify_implicits.check (renamed from test/pending/run/reify_implicits.check)0
-rw-r--r--test/files/run/reify_implicits.scala (renamed from test/pending/run/reify_implicits.scala)0
-rw-r--r--test/files/run/reify_sort.check (renamed from test/pending/run/reify_sort.check)0
-rw-r--r--test/files/run/reify_sort.scala (renamed from test/pending/run/reify_sort.scala)0
-rw-r--r--test/files/run/reify_this.check (renamed from test/pending/run/reify_this.check)0
-rw-r--r--test/files/run/reify_this.scala (renamed from test/pending/run/reify_this.scala)0
-rw-r--r--test/files/run/t5274_2.check (renamed from test/pending/run/t5274_2.check)0
-rw-r--r--test/files/run/t5274_2.scala (renamed from test/pending/run/t5274_2.scala)0
-rw-r--r--test/files/run/t5279.check (renamed from test/pending/run/t5279.check)0
-rw-r--r--test/files/run/t5279.scala (renamed from test/pending/run/t5279.scala)0
-rw-r--r--test/files/run/t5415.check (renamed from test/pending/run/t5415.check)0
-rw-r--r--test/files/run/t5415.scala (renamed from test/pending/run/t5415.scala)0
34 files changed, 19 insertions, 6 deletions
diff --git a/src/compiler/scala/reflect/internal/StdNames.scala b/src/compiler/scala/reflect/internal/StdNames.scala
index b3069adfb4..b1a24c0be2 100644
--- a/src/compiler/scala/reflect/internal/StdNames.scala
+++ b/src/compiler/scala/reflect/internal/StdNames.scala
@@ -271,6 +271,7 @@ trait StdNames extends NameManglers { self: SymbolTable =>
// Compiler utilized names
// val productElementName: NameType = "productElementName"
val Ident: NameType = "Ident"
+ val This: NameType = "This"
val StringContext: NameType = "StringContext"
val TYPE_ : NameType = "TYPE"
val TypeTree: NameType = "TypeTree"
diff --git a/src/compiler/scala/reflect/internal/Trees.scala b/src/compiler/scala/reflect/internal/Trees.scala
index 5bb0c98bfb..ca7801ac9d 100644
--- a/src/compiler/scala/reflect/internal/Trees.scala
+++ b/src/compiler/scala/reflect/internal/Trees.scala
@@ -251,8 +251,6 @@ trait Trees extends api.Trees { self: SymbolTable =>
def Super(sym: Symbol, mix: TypeName): Tree = Super(This(sym), mix)
- def This(sym: Symbol): Tree = This(sym.name.toTypeName) setSymbol sym
-
/** Block factory that flattens directly nested blocks.
*/
def Block(stats: Tree*): Block = {
diff --git a/src/compiler/scala/tools/nsc/transform/LiftCode.scala b/src/compiler/scala/tools/nsc/transform/LiftCode.scala
index 197a52f011..d0ed92f8ba 100644
--- a/src/compiler/scala/tools/nsc/transform/LiftCode.scala
+++ b/src/compiler/scala/tools/nsc/transform/LiftCode.scala
@@ -460,8 +460,19 @@ abstract class LiftCode extends Transform with TypingTransformers {
* Reify a free reference. The result will be either a mirror reference
* to a global value, or else a mirror Literal.
*/
- private def reifyFree(tree: Tree): Tree =
- mirrorCall(nme.Ident, reifySymRef(tree.symbol))
+ private def reifyFree(tree: Tree): Tree = tree match {
+ case This(_) if tree.symbol.isClass && !tree.symbol.isModuleClass =>
+ val sym = tree.symbol
+ if (reifyDebug) println("This for %s, reified as freeVar".format(sym))
+ if (reifyDebug) println("Free: " + sym)
+ val freeVar = mirrorCall("freeVar", reify(sym.name.toString), reify(sym.tpe), This(sym))
+ mirrorCall(nme.Ident, freeVar)
+ case This(_) =>
+ if (reifyDebug) println("This for %s, reified as This".format(tree.symbol))
+ mirrorCall(nme.This, reifySymRef(tree.symbol))
+ case _ =>
+ mirrorCall(nme.Ident, reifySymRef(tree.symbol))
+ }
// todo: consider whether we should also reify positions
private def reifyPosition(pos: Position): Tree =
diff --git a/src/library/scala/reflect/api/Trees.scala b/src/library/scala/reflect/api/Trees.scala
index 03b043c188..0a38fb45bf 100644
--- a/src/library/scala/reflect/api/Trees.scala
+++ b/src/library/scala/reflect/api/Trees.scala
@@ -537,6 +537,9 @@ trait Trees { self: Universe =>
// The symbol of a This is the class to which the this refers.
// For instance in C.this, it would be C.
+ def This(sym: Symbol): Tree =
+ This(sym.name.toTypeName) setSymbol sym
+
/** Designator <qualifier> . <name> */
case class Select(qualifier: Tree, name: Name)
extends RefTree
diff --git a/test/pending/run/reify_closure1.check b/test/files/run/reify_closure1.check
index b2f7f08c17..b2f7f08c17 100644
--- a/test/pending/run/reify_closure1.check
+++ b/test/files/run/reify_closure1.check
diff --git a/test/pending/run/reify_closure1.scala b/test/files/run/reify_closure1.scala
index 825a38dc1d..825a38dc1d 100644
--- a/test/pending/run/reify_closure1.scala
+++ b/test/files/run/reify_closure1.scala
diff --git a/test/pending/run/reify_closure2a.check b/test/files/run/reify_closure2a.check
index c1f3abd7e6..c1f3abd7e6 100644
--- a/test/pending/run/reify_closure2a.check
+++ b/test/files/run/reify_closure2a.check
diff --git a/test/pending/run/reify_closure2a.scala b/test/files/run/reify_closure2a.scala
index b88bec005d..b88bec005d 100644
--- a/test/pending/run/reify_closure2a.scala
+++ b/test/files/run/reify_closure2a.scala
diff --git a/test/pending/run/reify_closure3a.check b/test/files/run/reify_closure3a.check
index c1f3abd7e6..c1f3abd7e6 100644
--- a/test/pending/run/reify_closure3a.check
+++ b/test/files/run/reify_closure3a.check
diff --git a/test/pending/run/reify_closure3a.scala b/test/files/run/reify_closure3a.scala
index 6414fa58a3..6414fa58a3 100644
--- a/test/pending/run/reify_closure3a.scala
+++ b/test/files/run/reify_closure3a.scala
diff --git a/test/pending/run/reify_closure4a.check b/test/files/run/reify_closure4a.check
index c1f3abd7e6..c1f3abd7e6 100644
--- a/test/pending/run/reify_closure4a.check
+++ b/test/files/run/reify_closure4a.check
diff --git a/test/pending/run/reify_closure4a.scala b/test/files/run/reify_closure4a.scala
index 99e9d82706..99e9d82706 100644
--- a/test/pending/run/reify_closure4a.scala
+++ b/test/files/run/reify_closure4a.scala
diff --git a/test/pending/run/reify_closure5a.check b/test/files/run/reify_closure5a.check
index df9e19c591..df9e19c591 100644
--- a/test/pending/run/reify_closure5a.check
+++ b/test/files/run/reify_closure5a.check
diff --git a/test/pending/run/reify_closure5a.scala b/test/files/run/reify_closure5a.scala
index 0ac53d5479..0ac53d5479 100644
--- a/test/pending/run/reify_closure5a.scala
+++ b/test/files/run/reify_closure5a.scala
diff --git a/test/pending/run/reify_closure6.check b/test/files/run/reify_closure6.check
index e521ea874d..b9de4c6baf 100644
--- a/test/pending/run/reify_closure6.check
+++ b/test/files/run/reify_closure6.check
@@ -4,4 +4,4 @@ first invocation = 15
q = 2
y = 1
second invocation = 17
-q after second invocation = 2
+q after second invocation = 2 \ No newline at end of file
diff --git a/test/pending/run/reify_closure6.scala b/test/files/run/reify_closure6.scala
index 43ddfde28d..54f1791bf2 100644
--- a/test/pending/run/reify_closure6.scala
+++ b/test/files/run/reify_closure6.scala
@@ -25,4 +25,4 @@ object Test extends App {
println("first invocation = " + foo(List(1, 2, 3))(10))
println("second invocation = " + foo(List(1, 2, 3, 4))(10))
println("q after second invocation = " + q)
-}
+} \ No newline at end of file
diff --git a/test/pending/run/reify_closure7.check b/test/files/run/reify_closure7.check
index bf58b52bce..bf58b52bce 100644
--- a/test/pending/run/reify_closure7.check
+++ b/test/files/run/reify_closure7.check
diff --git a/test/pending/run/reify_closure7.scala b/test/files/run/reify_closure7.scala
index 8933df23fa..8933df23fa 100644
--- a/test/pending/run/reify_closure7.scala
+++ b/test/files/run/reify_closure7.scala
diff --git a/test/pending/run/reify_closure8a.check b/test/files/run/reify_closure8a.check
index 9a037142aa..9a037142aa 100644
--- a/test/pending/run/reify_closure8a.check
+++ b/test/files/run/reify_closure8a.check
diff --git a/test/pending/run/reify_closure8a.scala b/test/files/run/reify_closure8a.scala
index 5e54bfc8c7..5e54bfc8c7 100644
--- a/test/pending/run/reify_closure8a.scala
+++ b/test/files/run/reify_closure8a.scala
diff --git a/test/pending/run/reify_closures10.check b/test/files/run/reify_closures10.check
index fd3c81a4d7..fd3c81a4d7 100644
--- a/test/pending/run/reify_closures10.check
+++ b/test/files/run/reify_closures10.check
diff --git a/test/pending/run/reify_closures10.scala b/test/files/run/reify_closures10.scala
index d0f895ae4d..d0f895ae4d 100644
--- a/test/pending/run/reify_closures10.scala
+++ b/test/files/run/reify_closures10.scala
diff --git a/test/pending/run/reify_implicits.check b/test/files/run/reify_implicits.check
index e3aeb20f6b..e3aeb20f6b 100644
--- a/test/pending/run/reify_implicits.check
+++ b/test/files/run/reify_implicits.check
diff --git a/test/pending/run/reify_implicits.scala b/test/files/run/reify_implicits.scala
index a15cef9c97..a15cef9c97 100644
--- a/test/pending/run/reify_implicits.scala
+++ b/test/files/run/reify_implicits.scala
diff --git a/test/pending/run/reify_sort.check b/test/files/run/reify_sort.check
index 375536cc29..375536cc29 100644
--- a/test/pending/run/reify_sort.check
+++ b/test/files/run/reify_sort.check
diff --git a/test/pending/run/reify_sort.scala b/test/files/run/reify_sort.scala
index 42991fe5d2..42991fe5d2 100644
--- a/test/pending/run/reify_sort.scala
+++ b/test/files/run/reify_sort.scala
diff --git a/test/pending/run/reify_this.check b/test/files/run/reify_this.check
index af3d0652a9..af3d0652a9 100644
--- a/test/pending/run/reify_this.check
+++ b/test/files/run/reify_this.check
diff --git a/test/pending/run/reify_this.scala b/test/files/run/reify_this.scala
index 38ef72b6eb..38ef72b6eb 100644
--- a/test/pending/run/reify_this.scala
+++ b/test/files/run/reify_this.scala
diff --git a/test/pending/run/t5274_2.check b/test/files/run/t5274_2.check
index 375536cc29..375536cc29 100644
--- a/test/pending/run/t5274_2.check
+++ b/test/files/run/t5274_2.check
diff --git a/test/pending/run/t5274_2.scala b/test/files/run/t5274_2.scala
index 42991fe5d2..42991fe5d2 100644
--- a/test/pending/run/t5274_2.scala
+++ b/test/files/run/t5274_2.scala
diff --git a/test/pending/run/t5279.check b/test/files/run/t5279.check
index f599e28b8a..f599e28b8a 100644
--- a/test/pending/run/t5279.check
+++ b/test/files/run/t5279.check
diff --git a/test/pending/run/t5279.scala b/test/files/run/t5279.scala
index 39e7dd2c66..39e7dd2c66 100644
--- a/test/pending/run/t5279.scala
+++ b/test/files/run/t5279.scala
diff --git a/test/pending/run/t5415.check b/test/files/run/t5415.check
index e69de29bb2..e69de29bb2 100644
--- a/test/pending/run/t5415.check
+++ b/test/files/run/t5415.check
diff --git a/test/pending/run/t5415.scala b/test/files/run/t5415.scala
index 3db356da86..3db356da86 100644
--- a/test/pending/run/t5415.scala
+++ b/test/files/run/t5415.scala