File tree Expand file tree Collapse file tree 3 files changed +14
-2
lines changed
compiler/src/dotty/tools/dotc/typer Expand file tree Collapse file tree 3 files changed +14
-2
lines changed Original file line number Diff line number Diff line change @@ -1575,6 +1575,15 @@ class Typer extends Namer
1575
1575
if (! cls.is(AbstractOrTrait ) && ! ctx.isAfterTyper)
1576
1576
checkRealizableBounds(cls, cdef.namePos)
1577
1577
if (cls.is(Case ) && cls.derivesFrom(defn.EnumClass )) checkEnum(cdef, cls)
1578
+ if (seenParents.contains(defn.EnumClass )) {
1579
+ // Since enums are classes and Namer checks that classes don't extend multiple classes, we only check the class
1580
+ // parent.
1581
+ val firstParent = parents1.head.tpe.dealias.typeSymbol
1582
+ if (firstParent.derivesFrom(defn.EnumClass ))
1583
+ // Tricky to phrase; language taken from "case-to-case inheritance is prohibited".
1584
+ ctx.error(s " Enum ${cls.name} has enum ancestor ${firstParent.name}, but enum-to-enum inheritance is prohibited " , cdef.pos)
1585
+ }
1586
+
1578
1587
val cdef1 = assignType(cpy.TypeDef (cdef)(name, impl1), cls)
1579
1588
checkVariance(cdef1)
1580
1589
if (ctx.phase.isTyper && cdef1.tpe.derivesFrom(defn.DynamicClass ) && ! ctx.dynamicsEnabled) {
Original file line number Diff line number Diff line change
1
+ enum Foo { case A }
2
+ enum Bar { case A }
3
+ enum Baz extends Foo { case Z } // error
4
+
5
+ enum Quux extends Foo with Bar { case Z } // error
Load Diff This file was deleted.
You can’t perform that action at this time.
0 commit comments