summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2011-07-29 20:45:23 +0000
committerPaul Phillips <paulp@improving.org>2011-07-29 20:45:23 +0000
commiteb3ee130adade25279913dae09915120c40e77c6 (patch)
tree10a04ded29e9b2a0b7f63bcd40df9d363f236efb /src
parent2b15e8ce934c9629e18b5fa4a4bb39bba750575c (diff)
downloadscala-eb3ee130adade25279913dae09915120c40e77c6.tar.gz
scala-eb3ee130adade25279913dae09915120c40e77c6.tar.bz2
scala-eb3ee130adade25279913dae09915120c40e77c6.zip
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.
Diffstat (limited to 'src')
-rw-r--r--src/compiler/scala/tools/nsc/transform/LiftCode.scala57
1 files changed, 32 insertions, 25 deletions
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