IR KT-50258 rewrite enum-based 'when' more carefully

This commit is contained in:
Dmitry Petrov
2021-12-21 06:06:45 +00:00
committed by Space
parent e17f121b23
commit 8905586cbb
16 changed files with 308 additions and 28 deletions
@@ -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