diff options
author | Martin Odersky <odersky@gmail.com> | 2005-10-17 21:49:56 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2005-10-17 21:49:56 +0000 |
commit | 15956fc33e4bdc8eb760fdaeaf88744065177387 (patch) | |
tree | 1a3f0ae68865cdc8208092d3cc22dae531043480 /sources/scala/tools/nsc/transform/LambdaLift.scala | |
parent | db20991e477bec6e2f0d752a6aae943aefde88bb (diff) | |
download | scala-15956fc33e4bdc8eb760fdaeaf88744065177387.tar.gz scala-15956fc33e4bdc8eb760fdaeaf88744065177387.tar.bz2 scala-15956fc33e4bdc8eb760fdaeaf88744065177387.zip |
*** empty log message ***
Diffstat (limited to 'sources/scala/tools/nsc/transform/LambdaLift.scala')
-rwxr-xr-x | sources/scala/tools/nsc/transform/LambdaLift.scala | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/sources/scala/tools/nsc/transform/LambdaLift.scala b/sources/scala/tools/nsc/transform/LambdaLift.scala index 2cedb71a90..21f13e39c0 100755 --- a/sources/scala/tools/nsc/transform/LambdaLift.scala +++ b/sources/scala/tools/nsc/transform/LambdaLift.scala @@ -317,17 +317,21 @@ abstract class LambdaLift extends InfoTransform { } } - override def transform(tree: Tree): Tree = + override def transform(tree: Tree): Tree = { postTransform(super.transform(tree) setType lifted(tree.tpe)); - - /** Transform statements and add lifted definitions to them. */ - override def transformStats(stats: List[Tree], exprOwner: Symbol): List[Tree] = { - val stats1 = super.transformStats(stats, exprOwner); - if (currentOwner.isClass && !currentOwner.isPackageClass && liftedDefs(currentOwner).hasNext) - stats1 ::: liftedDefs(currentOwner).toList - else - stats1 } + /** Transform statements and add lifted definitions to them. */ + override def transformStats(stats: List[Tree], exprOwner: Symbol): List[Tree] = + for (val stat <- super.transformStats(stats, exprOwner)) yield { + stat match { + case ClassDef(mods, name, tparams, tpt, impl @ Template(parents, body)) + if (liftedDefs(stat.symbol).hasNext) => + copy.ClassDef(stat, mods, name, tparams, tpt, + copy.Template(impl, parents, body ::: liftedDefs(stat.symbol).toList)) + case _ => + stat + } + } override def transformUnit(unit: CompilationUnit): unit = { computeFreeVars; |