JS: don't optimize when over external enum

See KT-21468
This commit is contained in:
Alexey Andreev
2017-11-28 11:56:27 +03:00
parent 5b8c0d4c3e
commit 29b494cdac
4 changed files with 27 additions and 1 deletions
@@ -3388,6 +3388,12 @@ public class BoxJsTestGenerated extends AbstractBoxJsTest {
doTest(fileName);
}
@TestMetadata("externalEnumSubject.kt")
public void testExternalEnumSubject() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/box/expression/when/externalEnumSubject.kt");
doTest(fileName);
}
@TestMetadata("forWithOneStmWhen.kt")
public void testForWithOneStmWhen() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/box/expression/when/forWithOneStmWhen.kt");
@@ -243,7 +243,7 @@ private constructor(private val whenExpression: KtWhenExpression, context: Trans
private fun KotlinType.getEnumClass(): ClassDescriptor? {
if (isMarkedNullable) return null
val classDescriptor = (constructor.declarationDescriptor as? ClassDescriptor)
return if (classDescriptor?.kind == ClassKind.ENUM_CLASS) classDescriptor else null
return if (classDescriptor?.kind == ClassKind.ENUM_CLASS && !classDescriptor.isExternal) classDescriptor else null
}
private fun translateEntryExpression(
@@ -0,0 +1,4 @@
var X = {
A: {},
B: {}
};
@@ -0,0 +1,16 @@
// EXPECTED_REACHABLE_NODES: 1133
external enum class X {
A, B
}
fun box(): String {
if (foo(X.A) != "!") return "fail1: ${foo(X.A)}"
if (foo(X.B) != "@") return "fail2: ${foo(X.B)}"
return "OK"
}
fun foo(x: X) = when (x) {
X.A -> "!"
X.B -> "@"
}