Skip to content

Commit 6b9f9f7

Browse files
committed
Add type parameters derived from enum to default param getters of enum cases
1 parent 5b3d82a commit 6b9f9f7

File tree

2 files changed

+17
-7
lines changed

2 files changed

+17
-7
lines changed

Diff for: compiler/src/dotty/tools/dotc/ast/Desugar.scala

+12-7
Original file line numberDiff line numberDiff line change
@@ -694,15 +694,15 @@ object desugar {
694694
val originalTparams = constr1.leadingTypeParams
695695
val originalVparamss = asTermOnly(constr1.trailingParamss)
696696
lazy val derivedEnumParams = enumClass.typeParams.map(derivedTypeParamWithVariance)
697-
val impliedTparams =
698-
if (isEnumCase) {
697+
val enumTParams =
698+
if isEnumCase then
699699
val tparamReferenced = typeParamIsReferenced(
700-
enumClass.typeParams, originalTparams, originalVparamss, parents)
701-
if (originalTparams.isEmpty && (parents.isEmpty || tparamReferenced))
700+
enumClass.typeParams, originalTparams, originalVparamss, parents)
701+
if originalTparams.isEmpty && (parents.isEmpty || tparamReferenced) then
702702
derivedEnumParams.map(tdef => tdef.withFlags(tdef.mods.flags | PrivateLocal))
703-
else originalTparams
704-
}
705-
else originalTparams
703+
else Nil
704+
else Nil
705+
val impliedTparams = enumTParams ++ originalTparams
706706

707707
if mods.is(Trait) then
708708
for vparams <- originalVparamss; vparam <- vparams do
@@ -735,6 +735,11 @@ object desugar {
735735
derived.withAnnotations(Nil)
736736

737737
val constr = cpy.DefDef(constr1)(paramss = joinParams(constrTparams, constrVparamss))
738+
if enumTParams.nonEmpty then
739+
defaultGetters = defaultGetters.map:
740+
case ddef: DefDef =>
741+
val tParams = enumTParams.map(tparam => toMethParam(tparam, KeepAnnotations.All))
742+
cpy.DefDef(ddef)(paramss = joinParams(tParams, ddef.trailingParamss))
738743

739744
val (normalizedBody, enumCases, enumCompanionRef) = {
740745
// Add constructor type parameters and evidence implicit parameters

Diff for: tests/pos/i22137.scala

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
enum Parser[+Value]:
2+
case Success(value: Value, issues: Seq[Failure] = Seq.empty) extends Parser[Value]
3+
case Failure(exception: Throwable) extends Parser[Nothing]
4+
5+
val v = Parser.Success(1)

0 commit comments

Comments
 (0)