Turn off incorrect switch-optimization for when by enums
#KT-24708 Fixed
This commit is contained in:
+10
@@ -20554,6 +20554,16 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
|
||||
runTest("compiler/testData/codegen/box/when/enumOptimization/bigEnum.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("differentEnumClasses.kt")
|
||||
public void testDifferentEnumClasses() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/when/enumOptimization/differentEnumClasses.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("differentEnumClasses2.kt")
|
||||
public void testDifferentEnumClasses2() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/when/enumOptimization/differentEnumClasses2.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("duplicatingItems.kt")
|
||||
public void testDuplicatingItems() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/when/enumOptimization/duplicatingItems.kt");
|
||||
|
||||
+10
@@ -21619,6 +21619,16 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
|
||||
runTest("compiler/testData/codegen/box/when/enumOptimization/bigEnum.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("differentEnumClasses.kt")
|
||||
public void testDifferentEnumClasses() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/when/enumOptimization/differentEnumClasses.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("differentEnumClasses2.kt")
|
||||
public void testDifferentEnumClasses2() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/when/enumOptimization/differentEnumClasses2.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("duplicatingItems.kt")
|
||||
public void testDuplicatingItems() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/when/enumOptimization/duplicatingItems.kt");
|
||||
|
||||
+10
-4
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.js.translate.expression
|
||||
|
||||
import org.jetbrains.kotlin.backend.common.CodegenUtil
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.cfg.WhenChecker
|
||||
import org.jetbrains.kotlin.config.languageVersionSettings
|
||||
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||
@@ -208,11 +209,16 @@ private constructor(private val whenExpression: KtWhenExpression, context: Trans
|
||||
entries: List<KtWhenEntry>,
|
||||
expectedType: KotlinType
|
||||
): Pair<List<EntryWithConstants>, Int> {
|
||||
val classId = WhenChecker.getClassIdForTypeIfEnum(expectedType)
|
||||
return collectConstantEntries(
|
||||
fromIndex, entries,
|
||||
{ (it.toConstantValue(expectedType) as? EnumValue)?.enumEntryName?.identifier },
|
||||
{ uniqueEnumNames.add(it) },
|
||||
{ JsStringLiteral(it) }
|
||||
fromIndex, entries,
|
||||
{
|
||||
(it.toConstantValue(expectedType) as? EnumValue)
|
||||
?.takeIf { enumEntry -> enumEntry.enumClassId == classId }
|
||||
?.enumEntryName?.identifier
|
||||
},
|
||||
{ uniqueEnumNames.add(it) },
|
||||
{ JsStringLiteral(it) }
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user