IR KT-50258 rewrite enum-based 'when' more carefully
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
enum class MyEnum {
|
||||
First,
|
||||
Second
|
||||
}
|
||||
|
||||
fun getValue() = MyEnum.First
|
||||
|
||||
var result = "Failed"
|
||||
|
||||
fun getLambda(): (Int) -> Unit =
|
||||
when (val value = getValue()) {
|
||||
MyEnum.Second -> { _ -> }
|
||||
MyEnum.First -> { _ ->
|
||||
if (value == MyEnum.First) {
|
||||
result = "OK"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
getLambda().invoke(2)
|
||||
return result
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
enum class ABCD {
|
||||
A, B, C, D
|
||||
}
|
||||
|
||||
fun test(x: ABCD, y: ABCD, ok: String): String =
|
||||
when (x) {
|
||||
when (y) {
|
||||
ABCD.A -> ABCD.B
|
||||
ABCD.B -> ABCD.C
|
||||
ABCD.C -> ABCD.D
|
||||
ABCD.D -> ABCD.A
|
||||
} ->
|
||||
ok
|
||||
ABCD.A, ABCD.B, ABCD.C, ABCD.D ->
|
||||
x.toString()
|
||||
}
|
||||
|
||||
fun box(): String =
|
||||
test(ABCD.B, ABCD.A, "O") + test(ABCD.A, ABCD.D, "K")
|
||||
@@ -0,0 +1,21 @@
|
||||
enum class ABCD {
|
||||
A, B, C, D
|
||||
}
|
||||
|
||||
fun test(x: ABCD, y: ABCD, ok: String): String =
|
||||
when (x) {
|
||||
ABCD.A, ABCD.B ->
|
||||
when (y) {
|
||||
ABCD.A, ABCD.B -> ok
|
||||
ABCD.C, ABCD.D -> y.toString()
|
||||
}
|
||||
ABCD.C, ABCD.D ->
|
||||
x.toString()
|
||||
}
|
||||
|
||||
fun box(): String =
|
||||
test(ABCD.B, ABCD.A, "O") + test(ABCD.A, ABCD.B, "K")
|
||||
|
||||
// CHECK_BYTECODE_TEXT
|
||||
// JVM_IR_TEMPLATES
|
||||
// 2 (TABLE|LOOKUP)SWITCH
|
||||
Reference in New Issue
Block a user