summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/transform/LambdaLift.scala
diff options
context:
space:
mode:
authorHubert Plociniczak <hubert.plociniczak@epfl.ch>2010-10-20 13:26:02 +0000
committerHubert Plociniczak <hubert.plociniczak@epfl.ch>2010-10-20 13:26:02 +0000
commitde3e8492e61e02777520e8876e9e1bccb4b0f065 (patch)
treec125c022ff9c7e5249a3c31cfac1aa8997493a52 /src/compiler/scala/tools/nsc/transform/LambdaLift.scala
parent7a4b4c7a97b0b9417a82bc03ecac31ffe16cf40c (diff)
downloadscala-de3e8492e61e02777520e8876e9e1bccb4b0f065.tar.gz
scala-de3e8492e61e02777520e8876e9e1bccb4b0f065.tar.bz2
scala-de3e8492e61e02777520e8876e9e1bccb4b0f065.zip
Closes #2910.
Diffstat (limited to 'src/compiler/scala/tools/nsc/transform/LambdaLift.scala')
-rw-r--r--src/compiler/scala/tools/nsc/transform/LambdaLift.scala10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/LambdaLift.scala b/src/compiler/scala/tools/nsc/transform/LambdaLift.scala
index 034dc04f3c..184065a7ed 100644
--- a/src/compiler/scala/tools/nsc/transform/LambdaLift.scala
+++ b/src/compiler/scala/tools/nsc/transform/LambdaLift.scala
@@ -155,7 +155,7 @@ abstract class LambdaLift extends InfoTransform {
if (settings.debug.value) log("" + sym + " is free in " + owner);
if ((sym.isVariable || (sym.isValue && sym.isLazy)) && !sym.hasFlag(CAPTURED)) {
sym setFlag CAPTURED
- val symClass = sym.tpe.typeSymbol;
+ val symClass = sym.tpe.typeSymbol
atPhase(phase.next) {
sym updateInfo (
if (sym.hasAnnotation(VolatileAttr))
@@ -433,7 +433,7 @@ abstract class LambdaLift extends InfoTransform {
else if (sym.isLocal && !isSameOwnerEnclosure(sym))
atPos(tree.pos)(proxyRef(sym))
else tree
- else tree;
+ else tree
if (sym.isCapturedVariable)
atPos(tree.pos) {
val tp = tree.tpe
@@ -441,6 +441,12 @@ abstract class LambdaLift extends InfoTransform {
if (elemTree.tpe.typeSymbol != tp.typeSymbol) gen.mkAttributedCast(elemTree, tp) else elemTree
}
else tree1
+ case Block(stats, expr0) =>
+ val (lzyVals, rest) = stats.partition {
+ case stat@ValDef(_, _, _, _) if stat.symbol.isLazy => true
+ case _ => false
+ }
+ treeCopy.Block(tree, lzyVals:::rest, expr0)
case _ =>
tree
}