File tree 2 files changed +20
-0
lines changed
compiler/src/dotty/tools/dotc/transform
2 files changed +20
-0
lines changed Original file line number Diff line number Diff line change @@ -2,6 +2,7 @@ package dotty.tools.dotc
2
2
package transform
3
3
4
4
import MegaPhase ._
5
+ import core .Denotations .NonSymSingleDenotation
5
6
import core .DenotTransformers ._
6
7
import core .Symbols ._
7
8
import core .Contexts ._
@@ -549,6 +550,16 @@ class LambdaLift extends MiniPhase with IdentityDenotTransformer { thisPhase =>
549
550
}
550
551
}
551
552
553
+ override def transformSelect (tree : Select )(using Context ): Tree =
554
+ val denot = tree.denot
555
+ val sym = tree.symbol
556
+ // The Lifter updates the type of symbols using `installAfter` to give them a
557
+ // new `SymDenotation`, but that doesn't affect non-sym denotations, so we
558
+ // reload them manually here.
559
+ if denot.isInstanceOf [NonSymSingleDenotation ] && lifter.free.contains(sym) then
560
+ tree.qualifier.select(sym).withSpan(tree.span)
561
+ else tree
562
+
552
563
override def transformApply (tree : Apply )(using Context ): Apply =
553
564
cpy.Apply (tree)(tree.fun, lifter.addFreeArgs(tree.symbol, tree.args)).withSpan(tree.span)
554
565
Original file line number Diff line number Diff line change
1
+ object Bug {
2
+ def bar (ev : Any ) = {
3
+ trait X (val x : Int ) {
4
+ def qux : () => x.type = { () => println(ev); x }
5
+ }
6
+ (new X (1 ) {}).qux()
7
+ }
8
+ }
9
+
You can’t perform that action at this time.
0 commit comments