From 0b4e4cb7e71367752558fac29129f7e182d9206a Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Fri, 17 Apr 2015 20:13:38 +0200 Subject: Fix #342 Lambda lift idents need to get new prefix Idents of lifted symbols become class members, need to carry the right reference with the right prefix as type. --- src/dotty/tools/dotc/transform/LambdaLift.scala | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'src/dotty/tools/dotc/transform/LambdaLift.scala') diff --git a/src/dotty/tools/dotc/transform/LambdaLift.scala b/src/dotty/tools/dotc/transform/LambdaLift.scala index 5d47d2143..9b35d1d99 100644 --- a/src/dotty/tools/dotc/transform/LambdaLift.scala +++ b/src/dotty/tools/dotc/transform/LambdaLift.scala @@ -394,8 +394,13 @@ class LambdaLift extends MiniPhase with IdentityDenotTransformer { thisTransform val sym = tree.symbol tree.tpe match { case tpe @ TermRef(prefix, _) => - if ((prefix eq NoPrefix) && sym.enclosure != currentEnclosure && !sym.isStatic) - (if (sym is Method) memberRef(sym) else proxyRef(sym)).withPos(tree.pos) + if (prefix eq NoPrefix) + if (sym.enclosure != currentEnclosure && !sym.isStatic) + (if (sym is Method) memberRef(sym) else proxyRef(sym)).withPos(tree.pos) + else if (sym.owner.isClass) // sym was lifted out + ref(sym).withPos(tree.pos) + else + tree else if (!prefixIsElidable(tpe)) ref(tpe) else tree case _ => -- cgit v1.2.3