diff options
author | Eugene Burmako <xeno.by@gmail.com> | 2012-02-02 15:29:55 +0100 |
---|---|---|
committer | Eugene Burmako <xeno.by@gmail.com> | 2012-02-02 15:29:55 +0100 |
commit | 363f8af6a8c157485a644d00d75e2df10e71e661 (patch) | |
tree | 2cd691f5966c0c823f85abc94f8eef0057f676ff | |
parent | d940371bd50098c4146e52941880ccdbcb4ea47a (diff) | |
download | scala-363f8af6a8c157485a644d00d75e2df10e71e661.tar.gz scala-363f8af6a8c157485a644d00d75e2df10e71e661.tar.bz2 scala-363f8af6a8c157485a644d00d75e2df10e71e661.zip |
Fixes reifyThis
-rw-r--r-- | src/compiler/scala/reflect/internal/StdNames.scala | 1 | ||||
-rw-r--r-- | src/compiler/scala/reflect/internal/Trees.scala | 2 | ||||
-rw-r--r-- | src/compiler/scala/tools/nsc/transform/LiftCode.scala | 15 | ||||
-rw-r--r-- | src/library/scala/reflect/api/Trees.scala | 3 | ||||
-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 |