Skip to content

Commit f6f27e6

Browse files
committed
Fix scala#342 - Lambda lifted idents get new prefix
Idents of lifted symbols become class members, need to carry the right reference with the right prefix as type.
1 parent be625bc commit f6f27e6

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

src/dotty/tools/dotc/transform/LambdaLift.scala

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -394,8 +394,13 @@ class LambdaLift extends MiniPhase with IdentityDenotTransformer { thisTransform
394394
val sym = tree.symbol
395395
tree.tpe match {
396396
case tpe @ TermRef(prefix, _) =>
397-
if ((prefix eq NoPrefix) && sym.enclosure != currentEnclosure && !sym.isStatic)
398-
(if (sym is Method) memberRef(sym) else proxyRef(sym)).withPos(tree.pos)
397+
if (prefix eq NoPrefix)
398+
if (sym.enclosure != currentEnclosure && !sym.isStatic)
399+
(if (sym is Method) memberRef(sym) else proxyRef(sym)).withPos(tree.pos)
400+
else if (sym.owner.isClass) // sym was lifted out
401+
ref(sym).withPos(tree.pos)
402+
else
403+
tree
399404
else if (!prefixIsElidable(tpe)) ref(tpe)
400405
else tree
401406
case _ =>

tests/pos/i432.scala

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
object Test {
2+
def test2: Int = {
3+
var ds: String = null
4+
def s = {
5+
ds = "abs"
6+
ds
7+
}
8+
s.length
9+
}
10+
}

0 commit comments

Comments
 (0)