summaryrefslogtreecommitdiff
path: root/sources/scalac/transformer
diff options
context:
space:
mode:
Diffstat (limited to 'sources/scalac/transformer')
-rw-r--r--sources/scalac/transformer/LambdaLift.java10
1 files changed, 10 insertions, 0 deletions
diff --git a/sources/scalac/transformer/LambdaLift.java b/sources/scalac/transformer/LambdaLift.java
index f8d5218659..5cb2d52117 100644
--- a/sources/scalac/transformer/LambdaLift.java
+++ b/sources/scalac/transformer/LambdaLift.java
@@ -581,10 +581,20 @@ public class LambdaLift extends OwnerTransformer
case LabelDef(_, _, _):
Symbol sym = tree.symbol();
assert sym.isLocal() : sym;
+ // This is to fix the owner of y from x to f in this example:
+ // class C { def f = { val x = { val y = ...; y } } }
+ if (!isClassMember(sym.owner())) {
+ assert isClassMember(sym.owner().owner()): Debug.show(tree, sym);
+ sym.setOwner(sym.owner().owner());
+ }
break;
}
}
+ // where
+ private boolean isClassMember(Symbol sym) {
+ return sym.isConstructor() || sym.owner().isClass();
+ }
void liftSymbol(Symbol sym, Symbol[] oldtparams,
Symbol[] newtparams, Symbol[] newparams) {