Fix subject variable handling in specialized enum codegen

#KT-27161
This commit is contained in:
Dmitry Petrov
2018-09-26 14:36:02 +03:00
parent 258999fa9e
commit 7624dbbb20
11 changed files with 214 additions and 0 deletions
@@ -0,0 +1,13 @@
enum class Test {
A, B, OTHER
}
fun peek() = Test.A
fun box(): String {
val x = when (val type = peek()) {
Test.A -> "OK"
else -> "other"
}
return x
}
@@ -0,0 +1,10 @@
fun peek() = 1
fun box(): String {
val x = when (val x = peek()) {
1 -> "OK"
2 -> "2"
else -> "other $x"
}
return x
}
@@ -0,0 +1,25 @@
enum class Test {
A, B, OTHER
}
fun peek() = Test.A
fun box(): String {
val x = when (val t1 = peek()) {
Test.A -> {
val y = peek()
when (val t2 = y) {
Test.A ->
when (val t3 = peek()) {
Test.A -> "OK"
else -> "other 3"
}
else -> "other 2"
}
}
else -> "other 1"
}
return x
}
@@ -0,0 +1,30 @@
enum class Test {
A, B, OTHER
}
fun peek() = Test.A
fun box(): String {
val x = when (val t1 = peek()) {
Test.A -> {
when (
val t2 = when(val y = peek()) {
Test.A -> Test.A
Test.B -> Test.B
else -> Test.OTHER
}
) {
Test.A ->
when (val t3 = peek()) {
Test.A -> "OK"
else -> "other 3"
}
else -> "other 2"
}
}
else -> "other 1"
}
return x
}
@@ -0,0 +1,10 @@
fun peek() = "A"
fun box(): String {
val x = when (val s = peek()) {
"A" -> "OK"
"B" -> "B"
else -> "other $s"
}
return x
}