diff options
author | Burak Emir <emir@epfl.ch> | 2006-06-28 13:05:52 +0000 |
---|---|---|
committer | Burak Emir <emir@epfl.ch> | 2006-06-28 13:05:52 +0000 |
commit | e8a989b91447112d8e4be53542068be06cf5da9e (patch) | |
tree | bf73089081f4c7b5d4085b61d185e03d5c6067e7 | |
parent | a31a1a0c7e20c588b0b4b29eadf66ed8bb0823ed (diff) | |
download | scala-e8a989b91447112d8e4be53542068be06cf5da9e.tar.gz scala-e8a989b91447112d8e4be53542068be06cf5da9e.tar.bz2 scala-e8a989b91447112d8e4be53542068be06cf5da9e.zip |
fix #645
-rw-r--r-- | src/compiler/scala/tools/nsc/transform/LiftCode.scala | 11 |
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_) |