diff options
Diffstat (limited to 'sources/scalac/transformer')
-rw-r--r-- | sources/scalac/transformer/LambdaLift.java | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/sources/scalac/transformer/LambdaLift.java b/sources/scalac/transformer/LambdaLift.java index 67b396ec2e..9e3a497c80 100644 --- a/sources/scalac/transformer/LambdaLift.java +++ b/sources/scalac/transformer/LambdaLift.java @@ -444,9 +444,13 @@ public class LambdaLift extends OwnerTransformer (sym.kind == TYPE || (sym.kind == VAL && !sym.isMethod()))) { sym = descr.proxy(sym, currentOwner); } - Tree tree1 = copy.Ident(tree, sym).setType( - sym.nextType()); - if (name != sym.name) ((Ident)tree1).name = sym.name; + Tree tree1 = (sym.owner().kind == CLASS) + ? gen.mkRef(tree.pos, sym) + : copy.Ident(tree, sym).setType(sym.nextType()); + if (name != sym.name) { + if (tree1 instanceof Ident) ((Ident)tree1).name = sym.name; + else ((Select)tree1).selector = sym.name; + } if ((sym.flags & CAPTURED) != 0) return gen.Select(tree1, Names.elem); else return tree1; |