diff options
Diffstat (limited to 'sources/scalac/transformer/LambdaLift.java')
-rw-r--r-- | sources/scalac/transformer/LambdaLift.java | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/sources/scalac/transformer/LambdaLift.java b/sources/scalac/transformer/LambdaLift.java index 3eeb6d15b5..6e893c835a 100644 --- a/sources/scalac/transformer/LambdaLift.java +++ b/sources/scalac/transformer/LambdaLift.java @@ -207,13 +207,19 @@ public class LambdaLift extends OwnerTransformer } return super.transform(tree); - case TypeDef(int mods, Name name, TypeDef[] tparams, Tree rhs): + case TypeDef(int mods, Name name, Tree rhs): // ignore type definition as owner. // reason: it might be in a refinement // todo: handle type parameters? return copy.TypeDef( tree, mods, name, - transform(tparams, currentOwner), + transform(rhs, currentOwner)); + + case ValDef(int mods, Name name, Tree tpe, Tree rhs): + // ignore value definition as owner. + // reason: it might be in a refinement + return copy.ValDef( + tree, mods, name, transform(tpe), transform(rhs, currentOwner)); case Ident(Name name): @@ -354,20 +360,19 @@ public class LambdaLift extends OwnerTransformer transform(rhs, sym)); } - case TypeDef(int mods, Name name, TypeDef[] tparams, Tree rhs): + case TypeDef(int mods, Name name, Tree rhs): // ignore type definition as owner. // reason: it might be in a refinement // todo: handle type parameters? return copy.TypeDef( tree, mods, name, - transform(tparams, currentOwner), transform(rhs, currentOwner)); case ValDef(int mods, Name name, Tree tpe, Tree rhs): Symbol sym = tree.symbol(); Name name1 = sym.name; Tree tpe1 = transform(tpe); - Tree rhs1 = transform(rhs, sym); + Tree rhs1 = transform(rhs, currentOwner); if ((sym.flags & CAPTURED) != 0) { assert sym.isLocal(); Type unboxedType = sym.typeAt(descr.nextPhase); |