From eb3ee130adade25279913dae09915120c40e77c6 Mon Sep 17 00:00:00 2001 From: Paul Phillips Date: Fri, 29 Jul 2011 20:45:23 +0000 Subject: Fixing the very broken build (was going for "co... Fixing the very broken build (was going for "compiling" mostly because I can't be sure what to do with some of this) really this code is certainly not correct, please review by odersky. --- .../scala/tools/nsc/transform/LiftCode.scala | 57 ++++++++++++---------- 1 file changed, 32 insertions(+), 25 deletions(-) (limited to 'src') diff --git a/src/compiler/scala/tools/nsc/transform/LiftCode.scala b/src/compiler/scala/tools/nsc/transform/LiftCode.scala index 0ab7a0cf4c..56bcd42ae0 100644 --- a/src/compiler/scala/tools/nsc/transform/LiftCode.scala +++ b/src/compiler/scala/tools/nsc/transform/LiftCode.scala @@ -74,8 +74,9 @@ abstract class LiftCode extends Transform with TypingTransformers { case class FreeValue(tree: Tree) extends Tree - class Reifier(owner: Symbol) {#:: - import reflect.runtime.{Mirror => rm} + // !!! was: class Reifier(owner: Symbol) + class Reifier() { + import reflect.runtime.{ Mirror => rm } private val boundVars: mutable.Set[Symbol] = mutable.Set() private val freeTrees: mutable.Set[Tree] = mutable.Set() @@ -101,21 +102,21 @@ abstract class LiftCode extends Transform with TypingTransformers { case _ => "" } - def reify(value: Any): rm.Tree = { - def treatProduct(c: Product): rm.Tree = { - val name = objectName(c) - if (name.length != 0) - rm.gen.mkAttributedRef(rm.definitions.getModule(name)) - else { - val name = className(c) - if (name.length == 0) abort("don't know how to inject " + value) - val injectedArgs = new ListBuffer[rm.Tree] - for (i <- 0 until c.productArity) - injectedArgs += reify(c.productElement(i)) - rm.New(rm.gen.mkAttributedRef(rm.definitions.getClass(name)), List(injectedArgs.toList)) - } + def treatProduct(c: Product): rm.Tree = { + val name = objectName(c) + if (name.length != 0) + rm.gen.mkAttributedRef(rm.definitions.getModule(name)) + else { + val name = className(c) + if (name.length == 0) abort("don't know how to inject " + c) + val injectedArgs = new ListBuffer[rm.Tree] + for (i <- 0 until c.productArity) + injectedArgs += reify(c.productElement(i)) + rm.New(rm.gen.mkAttributedRef(rm.definitions.getClass(name)), List(injectedArgs.toList)) } + } + def reify(value: Any): rm.Tree = { def makeFree(tree: Tree): rm.Tree = { freeTrees += tree reify(Apply(gen.mkAttributedRef(definitions.freeValueMethod), List(tree))) @@ -123,7 +124,8 @@ abstract class LiftCode extends Transform with TypingTransformers { value match { case tree: Tree if freeTrees contains tree => - tree + // !!! was: tree + makeFree(tree) case tree: DefTree => boundVars += tree.symbol reify1(tree) @@ -153,16 +155,21 @@ abstract class LiftCode extends Transform with TypingTransformers { } } // Injector - def reify(tree: Tree): Tree = - new Reifier().reify(tree) - - def codify (tree: Tree): Tree = + def reify(tree: Tree) = new Reifier().reify(tree) - Block( - ValDef( - New(TypeTree(appliedType(definitions.CodeClass.typeConstructor, - List(tree.tpe))), - List(List(reify(tree)))) + def codify(tree: Tree) = { + val tp = appliedType(CodeClass.typeConstructor, List(tree.tpe)) + // !!! + New(TypeTree(tp), List(List(tree))) + } + // was: + // + // def codify(tree: Tree): Tree = + // Block( + // ValDef( + // New(TypeTree(appliedType(definitions.CodeClass.typeConstructor, + // List(tree.tpe))), + // List(List(reify(tree)))) /** Set of mutable local variables that are free in some inner method. */ private val freeMutableVars: mutable.Set[Symbol] = new mutable.HashSet -- cgit v1.2.3