@@ -78,8 +78,7 @@ object DesugarEnums {
7878 Select (Ident (nme.DOLLAR_VALUES ), name.toTermName)
7979
8080 private def registerCall (using Context ): List [Tree ] =
81- if (enumClass.typeParams.nonEmpty) Nil
82- else Apply (valuesDot(" register" ), This (EmptyTypeIdent ) :: Nil ) :: Nil
81+ Apply (valuesDot(" register" ), This (EmptyTypeIdent ) :: Nil ) :: Nil
8382
8483 /** The following lists of definitions for an enum type E:
8584 *
@@ -93,12 +92,14 @@ object DesugarEnums {
9392 * }
9493 */
9594 private def enumScaffolding (using Context ): List [Tree ] = {
95+ import dotty .tools .dotc .transform .SymUtils ._
96+ val rawEnumClassRef = rawRef(enumClass.typeRef)
97+ extension (tpe : NamedType ) def ofRawEnum = AppliedTypeTree (ref(tpe), rawEnumClassRef)
9698 val valuesDef =
97- DefDef (nme.values, Nil , Nil , TypeTree ( defn.ArrayOf (enumClass.typeRef)) , Select (valuesDot(nme.values), nme.toArray))
99+ DefDef (nme.values, Nil , Nil , defn.ArrayType .ofRawEnum , Select (valuesDot(nme.values), nme.toArray))
98100 .withFlags(Synthetic )
99101 val privateValuesDef =
100- ValDef (nme.DOLLAR_VALUES , TypeTree (),
101- New (TypeTree (defn.EnumValuesClass .typeRef.appliedTo(enumClass.typeRef :: Nil )), ListOfNil ))
102+ ValDef (nme.DOLLAR_VALUES , TypeTree (), New (defn.EnumValuesClass .typeRef.ofRawEnum, ListOfNil ))
102103 .withFlags(Private | Synthetic )
103104
104105 val valuesOfExnMessage = Apply (
@@ -138,7 +139,7 @@ object DesugarEnums {
138139 parents = enumClassRef :: scalaRuntimeDot(tpnme.EnumValue ) :: Nil ,
139140 derived = Nil ,
140141 self = EmptyValDef ,
141- body = List ( ordinalDef, toStringDef) ++ registerCall
142+ body = ordinalDef :: toStringDef :: registerCall
142143 ).withAttachment(ExtendsSingletonMirror , ()))
143144 DefDef (nme.DOLLAR_NEW , Nil ,
144145 List (List (param(nme.ordinalDollar_, defn.IntType ), param(nme.nameDollar, defn.StringType ))),
@@ -254,7 +255,7 @@ object DesugarEnums {
254255 val minKind = if (kind < seenKind) kind else seenKind
255256 ctx.tree.pushAttachment(EnumCaseCount , (count + 1 , minKind))
256257 val scaffolding =
257- if (enumClass.typeParams.nonEmpty || kind >= seenKind) Nil
258+ if (kind >= seenKind) Nil
258259 else if (kind == CaseKind .Object ) enumScaffolding
259260 else if (seenKind == CaseKind .Object ) enumValueCreator :: Nil
260261 else enumScaffolding :+ enumValueCreator
@@ -288,8 +289,8 @@ object DesugarEnums {
288289 val toStringDef = toStringMethLit(name.toString)
289290 val impl1 = cpy.Template (impl)(
290291 parents = impl.parents :+ scalaRuntimeDot(tpnme.EnumValue ),
291- body = List ( ordinalDef, toStringDef) ++ registerCall)
292- .withAttachment(ExtendsSingletonMirror , ())
292+ body = ordinalDef :: toStringDef :: registerCall
293+ ) .withAttachment(ExtendsSingletonMirror , ())
293294 val vdef = ValDef (name, TypeTree (), New (impl1)).withMods(mods.withAddedFlags(EnumValue , span))
294295 flatTree(scaffolding ::: vdef :: Nil ).withSpan(span)
295296 }
0 commit comments