@@ -2596,7 +2596,7 @@ class Typer extends Namer
2596
2596
2597
2597
def typedStats (stats : List [untpd.Tree ], exprOwner : Symbol )(using Context ): (List [Tree ], Context ) = {
2598
2598
val buf = new mutable.ListBuffer [Tree ]
2599
- val enumContexts = new mutable. HashMap [Symbol , Context ]
2599
+ var enumContexts : SimpleIdentityMap [Symbol , Context ] = SimpleIdentityMap . Empty
2600
2600
val initialNotNullInfos = ctx.notNullInfos
2601
2601
// A map from `enum` symbols to the contexts enclosing their definitions
2602
2602
@ tailrec def traverse (stats : List [untpd.Tree ])(using Context ): (List [Tree ], Context ) = stats match {
@@ -2618,7 +2618,7 @@ class Typer extends Namer
2618
2618
// replace body with expansion, because it will be used as inlined body
2619
2619
// from separately compiled files - the original BodyAnnotation is not kept.
2620
2620
case mdef1 : TypeDef if mdef1.symbol.is(Enum , butNot = Case ) =>
2621
- enumContexts(mdef1.symbol) = ctx
2621
+ enumContexts = enumContexts.updated (mdef1.symbol, ctx)
2622
2622
buf += mdef1
2623
2623
case EmptyTree =>
2624
2624
// clashing synthetic case methods are converted to empty trees, drop them here
@@ -2650,7 +2650,8 @@ class Typer extends Namer
2650
2650
}
2651
2651
def finalize (stat : Tree )(using Context ): Tree = stat match {
2652
2652
case stat : TypeDef if stat.symbol.is(Module ) =>
2653
- for (enumContext <- enumContexts.get(stat.symbol.linkedClass))
2653
+ val enumContext = enumContexts(stat.symbol.linkedClass)
2654
+ if enumContext != null then
2654
2655
checkEnumCaseRefsLegal(stat, enumContext)
2655
2656
stat.removeAttachment(Deriver ) match {
2656
2657
case Some (deriver) => deriver.finalize(stat)
0 commit comments