Skip to content

Commit 93d0faa

Browse files
committed
Support refinement type on enum case
This used to fail with: trait <refinement> in value x extends enum EC, but extending enums is prohibited.
1 parent a09b8a3 commit 93d0faa

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3166,7 +3166,7 @@ class Typer(@constructorOnly nestingLevel: Int = 0) extends Namer
31663166
.withType(dummy.termRef)
31673167
if (!cls.isOneOf(AbstractOrTrait) && !ctx.isAfterTyper)
31683168
checkRealizableBounds(cls, cdef.sourcePos.withSpan(cdef.nameSpan))
3169-
if cls.isEnum || firstParentTpe.classSymbol.isEnum then
3169+
if cls.isEnum || !cls.isRefinementClass && firstParentTpe.classSymbol.isEnum then
31703170
checkEnum(cdef, cls, firstParent)
31713171
val cdef1 = assignType(cpy.TypeDef(cdef)(name, impl1), cls)
31723172

tests/pos/enum-refinement.scala

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
enum Enum:
2+
case EC(val x: Int)
3+
4+
val a: Enum.EC { val x: 1 } = Enum.EC(1).asInstanceOf[Enum.EC { val x: 1 }]
5+
6+
import scala.language.experimental.modularity
7+
8+
enum EnumT:
9+
case EC(tracked val x: Int)
10+
11+
val b: EnumT.EC { val x: 1 } = EnumT.EC(1)
12+

0 commit comments

Comments
 (0)