Skip to content

Commit fdd5f6c

Browse files
author
Sebastian Nadorp
committed
Fix compiler crash for already compiled classes
1 parent e2a6caf commit fdd5f6c

File tree

2 files changed

+21
-8
lines changed

2 files changed

+21
-8
lines changed

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

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -87,14 +87,17 @@ object DesugarEnums {
8787
private def enumScaffolding(implicit ctx: Context): List[Tree] = {
8888
def enumDefDef(name: String, select: String) =
8989
DefDef(name.toTermName, Nil, Nil, TypeTree(), valuesDot(select))
90-
val privateValuesDef =
91-
ValDef(nme.DOLLAR_VALUES, TypeTree(),
92-
New(TypeTree(defn.EnumValuesType.appliedTo(enumClass.typeRef :: Nil)), ListOfNil))
93-
.withFlags(Private)
94-
val valueOfDef = enumDefDef("enumValue", "fromInt")
95-
val withNameDef = enumDefDef("enumValueNamed", "fromName")
96-
val valuesDef = enumDefDef("enumValues", "values")
97-
List(privateValuesDef, valueOfDef, withNameDef, valuesDef)
90+
91+
if (enumClass.exists) {
92+
val privateValuesDef =
93+
ValDef(nme.DOLLAR_VALUES, TypeTree(),
94+
New(TypeTree(defn.EnumValuesType.appliedTo(enumClass.typeRef :: Nil)), ListOfNil))
95+
.withFlags(Private)
96+
val valueOfDef = enumDefDef("enumValue", "fromInt")
97+
val withNameDef = enumDefDef("enumValueNamed", "fromName")
98+
val valuesDef = enumDefDef("enumValues", "values")
99+
List(privateValuesDef, valueOfDef, withNameDef, valuesDef)
100+
} else List.empty
98101
}
99102

100103
/** A creation method for a value of enum type `E`, which is defined as follows:
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
object RepeatedExtendEnum {
2+
3+
enum Maybe[T] {
4+
case Foo extends Maybe[Int]
5+
}
6+
7+
enum Maybe[T] {
8+
case Foo extends Maybe[Int]
9+
}
10+
}

0 commit comments

Comments
 (0)