File tree 2 files changed +25
-0
lines changed
compiler/src/dotty/tools/dotc/transform
2 files changed +25
-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 ._
@@ -530,7 +531,18 @@ class LambdaLift extends MiniPhase with IdentityDenotTransformer { thisPhase =>
530
531
override def prepareForUnit (tree : Tree )(using Context ): Context =
531
532
ctx.fresh.updateStore(Lifter , new Lifter (thisPhase))
532
533
534
+ /** The Lifter updates the type of symbols using `installAfter` to give them a
535
+ * new `SymDenotation`, but that doesn't affect non-sym denotations, so we
536
+ * reload them manually here.
537
+ */
538
+ private def reloadDenotation (tp : Type )(using Context ): Unit = tp match
539
+ case tp : NamedType =>
540
+ if tp.denot.isInstanceOf [NonSymSingleDenotation ] && lifter.free.contains(tp.symbol) then
541
+ tp.recomputeDenot()
542
+ case _ =>
543
+
533
544
override def transformIdent (tree : Ident )(using Context ): Tree = {
545
+ reloadDenotation(tree.tpe)
534
546
val sym = tree.symbol
535
547
tree.tpe match {
536
548
case tpe @ TermRef (prefix, _) =>
@@ -549,6 +561,10 @@ class LambdaLift extends MiniPhase with IdentityDenotTransformer { thisPhase =>
549
561
}
550
562
}
551
563
564
+ override def transformSelect (tree : Select )(using Context ): Tree =
565
+ reloadDenotation(tree.tpe)
566
+ tree
567
+
552
568
override def transformApply (tree : Apply )(using Context ): Apply =
553
569
cpy.Apply (tree)(tree.fun, lifter.addFreeArgs(tree.symbol, tree.args)).withSpan(tree.span)
554
570
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