Skip to content

Commit 69c7712

Browse files
committed
Drop EnumCase modifier
Use combination of Enum and Case instead.
1 parent 2a6d77d commit 69c7712

File tree

6 files changed

+13
-12
lines changed

6 files changed

+13
-12
lines changed

compiler/src/dotty/tools/dotc/ast/Desugar.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -297,8 +297,8 @@ object desugar {
297297
val isCaseClass = mods.is(Case) && !mods.is(Module)
298298
val isCaseObject = mods.is(Case) && mods.is(Module)
299299
val isImplicit = mods.is(Implicit)
300-
val isEnum = mods.hasMod[Mod.Enum] && !mods.is(Module)
301-
val isEnumCase = mods.hasMod[Mod.EnumCase]
300+
val isEnum = mods.isEnumClass && !mods.is(Module)
301+
def isEnumCase = mods.isEnumCase
302302
val isValueClass = parents.nonEmpty && isAnyVal(parents.head)
303303
// This is not watertight, but `extends AnyVal` will be replaced by `inline` later.
304304

@@ -641,7 +641,7 @@ object desugar {
641641
val moduleName = checkNotReservedName(mdef).asTermName
642642
val impl = mdef.impl
643643
val mods = mdef.mods
644-
lazy val isEnumCase = mods.hasMod[Mod.EnumCase]
644+
def isEnumCase = mods.isEnumCase
645645
if (mods is Package)
646646
PackageDef(Ident(moduleName), cpy.ModuleDef(mdef)(nme.PACKAGE, impl).withMods(mods &~ Package) :: Nil)
647647
else if (isEnumCase)
@@ -688,7 +688,7 @@ object desugar {
688688
*/
689689
def patDef(pdef: PatDef)(implicit ctx: Context): Tree = flatTree {
690690
val PatDef(mods, pats, tpt, rhs) = pdef
691-
if (mods.hasMod[Mod.EnumCase])
691+
if (mods.isEnumCase)
692692
pats map {
693693
case id: Ident =>
694694
expandSimpleEnumCase(id.name.asTermName, mods,

compiler/src/dotty/tools/dotc/ast/DesugarEnums.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ object DesugarEnums {
3333

3434
/** Is `tree` an (untyped) enum case? */
3535
def isEnumCase(tree: Tree)(implicit ctx: Context): Boolean = tree match {
36-
case tree: MemberDef => tree.mods.hasMod[Mod.EnumCase]
37-
case PatDef(mods, _, _, _) => mods.hasMod[Mod.EnumCase]
36+
case tree: MemberDef => tree.mods.isEnumCase
37+
case PatDef(mods, _, _, _) => mods.isEnumCase
3838
case _ => false
3939
}
4040

@@ -69,7 +69,7 @@ object DesugarEnums {
6969

7070
/** Add implied flags to an enum class or an enum case */
7171
def addEnumFlags(cdef: TypeDef)(implicit ctx: Context) =
72-
if (cdef.mods.hasMod[Mod.Enum]) cdef.withMods(cdef.mods.withFlags(cdef.mods.flags | Abstract | Sealed))
72+
if (cdef.mods.isEnumClass) cdef.withMods(cdef.mods.withFlags(cdef.mods.flags | Abstract | Sealed))
7373
else if (isEnumCase(cdef)) cdef.withMods(cdef.mods.withFlags(cdef.mods.flags | Final))
7474
else cdef
7575

compiler/src/dotty/tools/dotc/ast/untpd.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,8 +133,6 @@ object untpd extends Trees.Instance[Untyped] with UntypedTreeInfo {
133133
case class Inline() extends Mod(Flags.Inline)
134134

135135
case class Enum() extends Mod(Flags.EmptyFlags)
136-
137-
case class EnumCase() extends Mod(Flags.EmptyFlags)
138136
}
139137

140138
/** Modifiers and annotations for definitions
@@ -192,6 +190,9 @@ object untpd extends Trees.Instance[Untyped] with UntypedTreeInfo {
192190
val cls = implicitly[ClassTag[T]].runtimeClass
193191
mods.exists(mod => cls.isAssignableFrom(mod.getClass))
194192
}
193+
194+
def isEnumCase = hasMod[Mod.Enum] && is(Case)
195+
def isEnumClass = hasMod[Mod.Enum] && !is(Case)
195196
}
196197

197198
@sharable val EmptyModifiers: Modifiers = new Modifiers()

compiler/src/dotty/tools/dotc/parsing/Parsers.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2270,7 +2270,7 @@ object Parsers {
22702270
/** EnumCase = `case' (id ClassConstr [`extends' ConstrApps] | ids)
22712271
*/
22722272
def enumCase(start: Offset, mods: Modifiers): DefTree = {
2273-
val mods1 = mods.withAddedMod(atPos(in.offset)(Mod.EnumCase())) | Case
2273+
val mods1 = mods.withAddedMod(atPos(in.offset)(Mod.Enum())) | Case
22742274
accept(CASE)
22752275

22762276
in.adjustSepRegions(ARROW)

compiler/src/dotty/tools/dotc/typer/Checking.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -855,7 +855,7 @@ trait Checking {
855855
cls.isAnonymousClass &&
856856
cls.owner.isTerm &&
857857
(cls.owner.flagsUNSAFE.is(Case) || cls.owner.name == nme.DOLLAR_NEW)
858-
if (!cdef.mods.hasMod[untpd.Mod.EnumCase] && !isEnumAnonCls)
858+
if (!cdef.mods.isEnumCase && !isEnumAnonCls)
859859
ctx.error(em"normal case $cls in ${cls.owner} cannot extend an enum", cdef.pos)
860860
}
861861

compiler/src/dotty/tools/dotc/typer/Typer.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1904,7 +1904,7 @@ class Typer extends Namer
19041904
case mdef1 =>
19051905
import untpd.modsDeco
19061906
mdef match {
1907-
case mdef: untpd.TypeDef if mdef.mods.hasMod[untpd.Mod.Enum] =>
1907+
case mdef: untpd.TypeDef if mdef.mods.isEnumClass =>
19081908
enumContexts(mdef1.symbol) = ctx
19091909
case _ =>
19101910
}

0 commit comments

Comments
 (0)