Open
Description
Reproduction steps
Scala version: 2.13.12
under -opt:local
for basic hygiene, an exhaustively enumerated match should be the same as the match with a default wildcard case.
scala> def f(b: Boolean) = (b) match { case true => 42 case false => 27 }
def f(b: Boolean): Int
scala> :javap #f
public int f(boolean);
descriptor: (Z)I
flags: (0x0001) ACC_PUBLIC
Code:
stack=3, locals=2, args_size=2
0: iconst_1
1: iload_1
2: if_icmpne 8
5: bipush 42
7: ireturn
8: iconst_0
9: iload_1
10: if_icmpne 16
13: bipush 27
15: ireturn
16: new #17 // class scala/MatchError
19: dup
20: iload_1
21: invokestatic #23 // Method scala/runtime/BoxesRunTime.boxToBoolean:(Z)Ljava/lang/Boolean;
24: invokespecial #27 // Method scala/MatchError."<init>":(Ljava/lang/Object;)V
27: athrow
StackMapTable: number_of_entries = 2
frame_type = 8 /* same */
frame_type = 7 /* same */
LineNumberTable:
line 1: 0
LocalVariableTable:
Start Length Slot Name Signature
0 28 0 this L$line3/$read$$iw;
0 28 1 b Z
MethodParameters:
Name Flags
b final
scala> def f(b: Boolean) = (b) match { case true => 42 case _ => 27 }
def f(b: Boolean): Int
scala> :javap #f
public int f(boolean);
descriptor: (Z)I
flags: (0x0001) ACC_PUBLIC
Code:
stack=2, locals=2, args_size=2
0: iconst_1
1: iload_1
2: if_icmpne 8
5: bipush 42
7: ireturn
8: bipush 27
10: ireturn
StackMapTable: number_of_entries = 1
frame_type = 8 /* same */
LineNumberTable:
line 1: 0
LocalVariableTable:
Start Length Slot Name Signature
0 11 0 this L$line4/$read$$iw;
0 11 1 b Z
MethodParameters:
Name Flags
b final
scala>
Problem
The matches should be in every way the same. We know the semantics of false.==
. Similarly for enums. I didn't check dotty.