@@ -24,43 +24,80 @@ enum EC: // control case
24
24
case F
25
25
case G (arg : Int )
26
26
27
+ enum EO :
28
+ case H
29
+ case I (arg : Int )
30
+ // TODO: allow `productPrefix` to be overridden in singleton enum values - until `scala.Enum` is bootstrapped with
31
+ // `enumLabel`, `runtime.EnumValues` uses `productPrefix` for by-name lookup.
32
+ override def productPrefix : String = " noprefix"
33
+ end EO
34
+
35
+ enum EL {
36
+ case J
37
+ case K (arg : Int )
38
+ override def enumLabel : String = " nolabel" // will always be overridden by simple cases
39
+ }
40
+
41
+ enum EQ [T ] {
42
+ case L extends EQ [Int ]
43
+ override def enumLabel : String = " nolabel" // will always be overridden by value cases
44
+ }
45
+
27
46
abstract class Tag [T ] extends Enum
28
47
object Tag :
29
48
private final class IntTagImpl extends Tag [Int ] with runtime.EnumValue :
30
49
def ordinal = 0
50
+ def enumLabel = " IntTag"
31
51
override def hashCode = 123
32
52
final val IntTag : Tag [Int ] = IntTagImpl ()
33
53
34
54
@ main def Test =
35
- assert(ES .A .toString == " overridden" , s " ES.A.toString = ${ES .A .toString}" )
36
- assert(ES .A .productPrefix == " A" , s " ES.A.productPrefix = ${ES .A .productPrefix}" )
37
- assert(ES .A .enumLabel == " A" , s " ES.A.enumLabel = ${ES .A .enumLabel}" )
38
- assert(ES .valueOf(" A" ) == ES .A , s " ES.valueOf(A) = ${ES .valueOf(" A" )}" )
39
- assert(EJ .B .toString == " overridden" , s " EJ.B.toString = ${EJ .B .toString}" )
40
- assert(EJ .B .productPrefix == " B" , s " EJ.B.productPrefix = ${EJ .B .productPrefix}" )
41
- assert(EJ .B .enumLabel == " B" , s " EJ.B.enumLabel = ${EJ .B .enumLabel}" )
42
- assert(EJ .valueOf(" B" ) == EJ .B , s " EJ.valueOf(B) = ${EJ .valueOf(" B" )}" )
43
- assert(EM .C .toString == " overridden" , s " EM.C.toString = ${EM .C .toString}" )
44
- assert(EM .C .productPrefix == " C" , s " EM.C.productPrefix = ${EM .C .productPrefix}" )
45
- assert(EM .C .enumLabel == " C" , s " EM.C.enumLabel = ${EM .C .enumLabel}" )
46
- assert(EM .valueOf(" C" ) == EM .C , s " EM.valueOf(C) = ${EM .valueOf(" C" )}" )
47
- assert(ET .D .toString == " overridden" , s " ET.D.toString = ${ET .D .toString}" )
48
- assert(ET .D .productPrefix == " D" , s " ET.D.productPrefix = ${ET .D .productPrefix}" )
49
- assert(ET .D .enumLabel == " D" , s " ET.D.enumLabel = ${ET .D .enumLabel}" )
50
- assert(EZ .E (0 ).toString == " overridden" , s " EZ.E(0).toString = ${EZ .E (0 ).toString}" )
51
- assert(EZ .E (0 ).productPrefix == " E" , s " EZ.E(0).productPrefix = ${EZ .E (0 ).productPrefix}" )
52
- assert(EZ .E (0 ).enumLabel == " E" , s " EZ.E(0).enumLabel = ${EZ .E (0 ).enumLabel}" )
53
- assert(EC .F .toString == " F" , s " EC.F.toString = ${EC .F .toString}" )
54
- assert(EC .F .productPrefix == " F" , s " EC.F.productPrefix = ${EC .F .productPrefix}" )
55
- assert(EC .F .enumLabel == " F" , s " EC.F.enumLabel = ${EC .F .enumLabel}" )
56
- assert(EC .valueOf(" F" ) == EC .F , s " EC.valueOf(F) = ${EC .valueOf(" F" )}" )
57
- assert(EC .G (0 ).toString == " G(0)" , s " EC.G(0).toString = ${EC .G (0 ).toString}" )
58
- assert(EC .G (0 ).productPrefix == " G" , s " EC.G(0).productPrefix = ${EC .G (0 ).productPrefix}" )
59
- assert(EC .G (0 ).enumLabel == " G" , s " EC.G(0).enumLabel = ${EC .G (0 ).enumLabel}" )
55
+ assert(ES .A .toString == " overridden" , s " ES.A.toString = ${ES .A .toString}" )
56
+ assert(ES .A .productPrefix == " A" , s " ES.A.productPrefix = ${ES .A .productPrefix}" )
57
+ assert(ES .A .enumLabel == " A" , s " ES.A.enumLabel = ${ES .A .enumLabel}" )
58
+ assert(ES .valueOf(" A" ) == ES .A , s " ES.valueOf(A) = ${ES .valueOf(" A" )}" )
59
+ assert(EJ .B .toString == " overridden" , s " EJ.B.toString = ${EJ .B .toString}" )
60
+ assert(EJ .B .productPrefix == " B" , s " EJ.B.productPrefix = ${EJ .B .productPrefix}" )
61
+ assert(EJ .B .enumLabel == " B" , s " EJ.B.enumLabel = ${EJ .B .enumLabel}" )
62
+ assert(EJ .valueOf(" B" ) == EJ .B , s " EJ.valueOf(B) = ${EJ .valueOf(" B" )}" )
63
+ assert(EM .C .toString == " overridden" , s " EM.C.toString = ${EM .C .toString}" )
64
+ assert(EM .C .productPrefix == " C" , s " EM.C.productPrefix = ${EM .C .productPrefix}" )
65
+ assert(EM .C .enumLabel == " C" , s " EM.C.enumLabel = ${EM .C .enumLabel}" )
66
+ assert(EM .valueOf(" C" ) == EM .C , s " EM.valueOf(C) = ${EM .valueOf(" C" )}" )
67
+ assert(ET .D .toString == " overridden" , s " ET.D.toString = ${ET .D .toString}" )
68
+ assert(ET .D .productPrefix == " D" , s " ET.D.productPrefix = ${ET .D .productPrefix}" )
69
+ assert(ET .D .enumLabel == " D" , s " ET.D.enumLabel = ${ET .D .enumLabel}" )
70
+ assert(EZ .E (0 ).toString == " overridden" , s " EZ.E(0).toString = ${EZ .E (0 ).toString}" )
71
+ assert(EZ .E (0 ).productPrefix == " E" , s " EZ.E(0).productPrefix = ${EZ .E (0 ).productPrefix}" )
72
+ assert(EZ .E (0 ).enumLabel == " E" , s " EZ.E(0).enumLabel = ${EZ .E (0 ).enumLabel}" )
73
+ assert(EC .F .toString == " F" , s " EC.F.toString = ${EC .F .toString}" )
74
+ assert(EC .F .productPrefix == " F" , s " EC.F.productPrefix = ${EC .F .productPrefix}" )
75
+ assert(EC .F .enumLabel == " F" , s " EC.F.enumLabel = ${EC .F .enumLabel}" )
76
+ assert(EC .valueOf(" F" ) == EC .F , s " EC.valueOf(F) = ${EC .valueOf(" F" )}" )
77
+ assert(EC .G (0 ).toString == " G(0)" , s " EC.G(0).toString = ${EC .G (0 ).toString}" )
78
+ assert(EC .G (0 ).productPrefix == " G" , s " EC.G(0).productPrefix = ${EC .G (0 ).productPrefix}" )
79
+ assert(EC .G (0 ).enumLabel == " G" , s " EC.G(0).enumLabel = ${EC .G (0 ).enumLabel}" )
80
+ assert(EO .H .toString == " H" , s " EO.H.toString = ${EO .H .toString}" )
81
+ assert(EO .H .productPrefix == " H" , s " EO.H.productPrefix = ${EO .H .productPrefix}" ) // TODO: enable override
82
+ assert(EO .H .enumLabel == " H" , s " EO.H.enumLabel = ${EO .H .enumLabel}" )
83
+ assert(EO .valueOf(" H" ) == EO .H , s " EO.valueOf(H) = ${EO .valueOf(" H" )}" )
84
+ assert(EO .I (0 ).toString == " noprefix(0)" , s " EO.I(0).toString = ${EO .I (0 ).toString}" )
85
+ assert(EO .I (0 ).productPrefix == " noprefix" , s " EO.I(0).productPrefix = ${EO .I (0 ).productPrefix}" )
86
+ assert(EO .I (0 ).enumLabel == " I" , s " EO.I(0).enumLabel = ${EO .I (0 ).enumLabel}" )
87
+ assert(EL .J .toString == " J" , s " EL.J.toString = ${EL .J .toString}" )
88
+ assert(EL .J .productPrefix == " J" , s " EL.J.productPrefix = ${EL .J .productPrefix}" )
89
+ assert(EL .J .enumLabel == " J" , s " EL.J.enumLabel = ${EL .J .enumLabel}" ) // can't override label in simple case
90
+ assert(EL .valueOf(" J" ) == EL .J , s " EL.valueOf(J) = ${EL .valueOf(" J" )}" )
91
+ assert(EL .K (0 ).toString == " K(0)" , s " EL.K(0).toString = ${EL .K (0 ).toString}" )
92
+ assert(EL .K (0 ).productPrefix == " K" , s " EL.K(0).productPrefix = ${EL .K (0 ).productPrefix}" )
93
+ assert(EL .K (0 ).enumLabel == " nolabel" , s " EL.K(0).enumLabel = ${EL .K (0 ).enumLabel}" ) // enum label overridden in class case
94
+ assert(EQ .L .toString == " L" , s " EQ.L.toString = ${EQ .L .toString}" )
95
+ assert(EQ .L .productPrefix == " L" , s " EQ.L.productPrefix = ${EQ .L .productPrefix}" )
96
+ assert(EQ .L .enumLabel == " L" , s " EQ.L.enumLabel = ${EQ .L .enumLabel}" ) // can't override label in value case
60
97
61
98
assert(
62
99
assertion = Tag .IntTag .toString == s " ${Tag .IntTag .getClass.getName}@ ${Integer .toHexString(123 )}" ,
63
100
message = s " Tag.IntTag.toString = ${Tag .IntTag .toString}"
64
101
)
65
102
assert(Tag .IntTag .productPrefix == Tag .IntTag .toString, s " Tag.IntTag.productPrefix = ${Tag .IntTag .productPrefix}" )
66
- assert(Tag .IntTag .enumLabel == Tag . IntTag .toString , s " Tag.IntTag.enumLabel = ${Tag .IntTag .enumLabel}" )
103
+ assert(Tag .IntTag .enumLabel == " IntTag" , s " Tag.IntTag.enumLabel = ${Tag .IntTag .enumLabel}" )
0 commit comments