@@ -25,7 +25,7 @@ import dotty.tools.dotc.core.Flags
25
25
import ValueClasses ._
26
26
import TypeUtils ._
27
27
28
- class Erasure extends Phase with DenotTransformer {
28
+ class Erasure extends Phase with DenotTransformer { thisTransformer =>
29
29
30
30
override def name : String = " erasure"
31
31
@@ -46,10 +46,15 @@ class Erasure extends Phase with DenotTransformer {
46
46
)
47
47
}
48
48
else {
49
- val owner = ref.owner
50
- ref.copySymDenotation(
51
- owner = if (owner eq defn.AnyClass ) defn.ObjectClass else owner,
52
- info = transformInfo(ref.symbol, ref.info))
49
+ val oldOwner = ref.owner
50
+ val newOwner = if (oldOwner eq defn.AnyClass ) defn.ObjectClass else oldOwner
51
+ val oldInfo = ref.info
52
+ val newInfo = transformInfo(ref.symbol, oldInfo)
53
+ if ((oldOwner eq newOwner) && (oldInfo eq newInfo)) ref
54
+ else {
55
+ assert(! ref.is(Flags .PackageClass ), s " trans $ref @ ${ctx.phase} oldOwner = $oldOwner, newOwner = $newOwner, oldInfo = $oldInfo, newInfo = $newInfo ${oldOwner eq newOwner} ${oldInfo eq newInfo}" )
56
+ ref.copySymDenotation(owner = newOwner, info = newInfo)
57
+ }
53
58
}
54
59
case ref =>
55
60
ref.derivedSingleDenotation(ref.symbol, erasure(ref.info))
@@ -359,7 +364,7 @@ object Erasure {
359
364
}
360
365
val bridge = ctx.newSymbol(newDef.symbol.owner,
361
366
parentSym.name, parentSym.flags | Flags .Bridge , parentSym.info, coord = newDef.symbol.owner.coord).asTerm
362
- bridge.entered // this should be safe, as we're executing in context of next phase
367
+ bridge.enteredAfter(ctx.phase.prev. asInstanceOf [ DenotTransformer ]) // this should be safe, as we're executing in context of next phase
363
368
ctx.debuglog(s " generating bridge from ${newDef.symbol} to $bridge" )
364
369
365
370
val sel : Tree = This (newDef.symbol.owner.asClass).select(newDef.symbol.termRef)
0 commit comments