summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBurak Emir <emir@epfl.ch>2006-06-28 13:05:52 +0000
committerBurak Emir <emir@epfl.ch>2006-06-28 13:05:52 +0000
commite8a989b91447112d8e4be53542068be06cf5da9e (patch)
treebf73089081f4c7b5d4085b61d185e03d5c6067e7
parenta31a1a0c7e20c588b0b4b29eadf66ed8bb0823ed (diff)
downloadscala-e8a989b91447112d8e4be53542068be06cf5da9e.tar.gz
scala-e8a989b91447112d8e4be53542068be06cf5da9e.tar.bz2
scala-e8a989b91447112d8e4be53542068be06cf5da9e.zip
fix #645
-rw-r--r--src/compiler/scala/tools/nsc/transform/LiftCode.scala11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/LiftCode.scala b/src/compiler/scala/tools/nsc/transform/LiftCode.scala
index 03e964df88..5540029c38 100644
--- a/src/compiler/scala/tools/nsc/transform/LiftCode.scala
+++ b/src/compiler/scala/tools/nsc/transform/LiftCode.scala
@@ -62,8 +62,14 @@ abstract class LiftCode extends Transform {
def reify(tree: Tree): reflect.Tree = tree match {
case Ident(_) =>
val rsym = reify(tree.symbol);
- if (rsym == reflect.NoSymbol) FreeValue(tree)
- else reflect.Ident(rsym)
+ //Console.println("LiftCode: seen ident")
+ if (rsym == reflect.NoSymbol) {
+ //Console.println(" free = "+tree)
+ FreeValue(tree)
+ } else {
+ //Console.println(" rsym = "+rsym)
+ reflect.Ident(rsym)
+ }
case Select(qual, _) =>
val rsym = reify(tree.symbol);
if (rsym == reflect.NoSymbol) throw new TypeError("cannot reify symbol: " + tree.symbol)
@@ -107,6 +113,7 @@ abstract class LiftCode extends Transform {
case vd @ ValDef(mods, name, tpt, rhs) =>
val rtpe = reify(vd.tpe) // will return null, currently?!
val sym = reflect.LocalValue(currentOwner, name.toString(), rtpe)
+ env(vd.symbol) = sym // bq: despite Scala's scoping rules, this should work because references to vd.symbol were type checked.
val rhs_ = reify(rhs)
reflect.ValDef(sym, rhs_)