diff options
Diffstat (limited to 'sources/scalac/transformer/LambdaLift.java')
-rw-r--r-- | sources/scalac/transformer/LambdaLift.java | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/sources/scalac/transformer/LambdaLift.java b/sources/scalac/transformer/LambdaLift.java index e6d2fc902b..fd89c3c260 100644 --- a/sources/scalac/transformer/LambdaLift.java +++ b/sources/scalac/transformer/LambdaLift.java @@ -310,7 +310,9 @@ public class LambdaLift extends OwnerTransformer public Tree transform(Tree tree) { //global.debugPrinter.print("lifting ").print(tree).println().end();//DEBUG + //System.out.print(tree.type + " --> ");//DEBUG tree.type = descr.transform(tree.type, currentOwner); + //System.out.println(tree.type);//DEBUG switch (tree) { case ClassDef(_, _, TypeDef[] tparams, ValDef[][] vparams, Tree tpe, Template impl): Symbol sym = tree.symbol(); @@ -403,7 +405,7 @@ public class LambdaLift extends OwnerTransformer return copy.Apply( tree, fn1, addFreeArgs(tree.pos, get(free.fvs, fsym), args1)); - case Ident(_): + case Ident(Name name): Symbol sym = tree.symbol(); if (sym.isLocal() && (sym.kind == TYPE || (sym.kind == VAL && !sym.isMethod()))) { @@ -411,6 +413,7 @@ public class LambdaLift extends OwnerTransformer } Tree tree1 = copy.Ident(tree, sym).setType( sym.typeAt(descr.nextPhase)); + if (name != sym.name) ((Ident)tree1).name = sym.name; if ((sym.flags & CAPTURED) != 0) return gen.Select(tree1, Names.elem); else return tree1; @@ -563,7 +566,7 @@ public class LambdaLift extends OwnerTransformer gen.mkRef( pos, global.definitions.getClass(Names.scala_COLONCOLON).constructor()), - new Tree[]{gen.mkType(pos, elemtpe), gen.mkType(pos, elemtpe)}), + new Tree[]{gen.mkType(pos, elemtpe)}), new Tree[]{hd, tl})); } } |