Fix subject variable handling in specialized enum codegen
#KT-27161
This commit is contained in:
@@ -91,6 +91,7 @@ abstract class SwitchCodegen(
|
||||
v.mark(endLabel)
|
||||
|
||||
subjectVariableDescriptor?.let {
|
||||
codegen.frameMap.leave(it)
|
||||
v.visitLocalVariable(
|
||||
it.name.asString(), subjectType.descriptor, null,
|
||||
beginLabel, endLabel, subjectLocal
|
||||
|
||||
@@ -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
|
||||
}
|
||||
+25
@@ -23239,6 +23239,31 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
||||
runTest("compiler/testData/codegen/box/when/whenSubjectVariable/isCheckOnSubjectVariable.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("kt27161.kt")
|
||||
public void testKt27161() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/when/whenSubjectVariable/kt27161.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("kt27161_int.kt")
|
||||
public void testKt27161_int() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/when/whenSubjectVariable/kt27161_int.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("kt27161_nested.kt")
|
||||
public void testKt27161_nested() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/when/whenSubjectVariable/kt27161_nested.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("kt27161_nested2.kt")
|
||||
public void testKt27161_nested2() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/when/whenSubjectVariable/kt27161_nested2.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("kt27161_string.kt")
|
||||
public void testKt27161_string() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/when/whenSubjectVariable/kt27161_string.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("rangeCheckOnSubjectVariable.kt")
|
||||
public void testRangeCheckOnSubjectVariable() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/when/whenSubjectVariable/rangeCheckOnSubjectVariable.kt");
|
||||
|
||||
+25
@@ -23239,6 +23239,31 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
||||
runTest("compiler/testData/codegen/box/when/whenSubjectVariable/isCheckOnSubjectVariable.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("kt27161.kt")
|
||||
public void testKt27161() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/when/whenSubjectVariable/kt27161.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("kt27161_int.kt")
|
||||
public void testKt27161_int() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/when/whenSubjectVariable/kt27161_int.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("kt27161_nested.kt")
|
||||
public void testKt27161_nested() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/when/whenSubjectVariable/kt27161_nested.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("kt27161_nested2.kt")
|
||||
public void testKt27161_nested2() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/when/whenSubjectVariable/kt27161_nested2.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("kt27161_string.kt")
|
||||
public void testKt27161_string() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/when/whenSubjectVariable/kt27161_string.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("rangeCheckOnSubjectVariable.kt")
|
||||
public void testRangeCheckOnSubjectVariable() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/when/whenSubjectVariable/rangeCheckOnSubjectVariable.kt");
|
||||
|
||||
+25
@@ -23244,6 +23244,31 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
||||
runTest("compiler/testData/codegen/box/when/whenSubjectVariable/isCheckOnSubjectVariable.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("kt27161.kt")
|
||||
public void testKt27161() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/when/whenSubjectVariable/kt27161.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("kt27161_int.kt")
|
||||
public void testKt27161_int() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/when/whenSubjectVariable/kt27161_int.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("kt27161_nested.kt")
|
||||
public void testKt27161_nested() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/when/whenSubjectVariable/kt27161_nested.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("kt27161_nested2.kt")
|
||||
public void testKt27161_nested2() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/when/whenSubjectVariable/kt27161_nested2.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("kt27161_string.kt")
|
||||
public void testKt27161_string() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/when/whenSubjectVariable/kt27161_string.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("rangeCheckOnSubjectVariable.kt")
|
||||
public void testRangeCheckOnSubjectVariable() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/when/whenSubjectVariable/rangeCheckOnSubjectVariable.kt");
|
||||
|
||||
+25
@@ -21059,6 +21059,31 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
|
||||
runTest("compiler/testData/codegen/box/when/whenSubjectVariable/isCheckOnSubjectVariable.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("kt27161.kt")
|
||||
public void testKt27161() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/when/whenSubjectVariable/kt27161.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("kt27161_int.kt")
|
||||
public void testKt27161_int() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/when/whenSubjectVariable/kt27161_int.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("kt27161_nested.kt")
|
||||
public void testKt27161_nested() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/when/whenSubjectVariable/kt27161_nested.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("kt27161_nested2.kt")
|
||||
public void testKt27161_nested2() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/when/whenSubjectVariable/kt27161_nested2.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("kt27161_string.kt")
|
||||
public void testKt27161_string() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/when/whenSubjectVariable/kt27161_string.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("rangeCheckOnSubjectVariable.kt")
|
||||
public void testRangeCheckOnSubjectVariable() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/when/whenSubjectVariable/rangeCheckOnSubjectVariable.kt");
|
||||
|
||||
+25
@@ -22104,6 +22104,31 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
|
||||
runTest("compiler/testData/codegen/box/when/whenSubjectVariable/isCheckOnSubjectVariable.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("kt27161.kt")
|
||||
public void testKt27161() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/when/whenSubjectVariable/kt27161.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("kt27161_int.kt")
|
||||
public void testKt27161_int() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/when/whenSubjectVariable/kt27161_int.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("kt27161_nested.kt")
|
||||
public void testKt27161_nested() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/when/whenSubjectVariable/kt27161_nested.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("kt27161_nested2.kt")
|
||||
public void testKt27161_nested2() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/when/whenSubjectVariable/kt27161_nested2.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("kt27161_string.kt")
|
||||
public void testKt27161_string() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/when/whenSubjectVariable/kt27161_string.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("rangeCheckOnSubjectVariable.kt")
|
||||
public void testRangeCheckOnSubjectVariable() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/when/whenSubjectVariable/rangeCheckOnSubjectVariable.kt");
|
||||
|
||||
Reference in New Issue
Block a user