[JS IR] Eager initialisation for all pure properties

^KT-43222 fixed
This commit is contained in:
Ilya Goncharov
2020-11-09 15:30:37 +03:00
parent 3da9761f37
commit d6bc309c94
4 changed files with 36 additions and 1 deletions
@@ -40,7 +40,14 @@ class PropertyLazyInitLowering(private val context: JsIrBackendContext) : FileLo
val fieldToInitializer = calculateFieldToExpression(
functions
).onEach { it.key.initializer = null }
)
val allPropertyInitializersPure = fieldToInitializer
.all { it.value.isPure(anyVariable = true) }
if (allPropertyInitializersPure) return
fieldToInitializer.onEach { it.key.initializer = null }
if (fieldToInitializer.isEmpty()) return
@@ -0,0 +1,18 @@
// TARGET_BACKEND: JS_IR
// FILE: A.kt
val a = "A"
// FILE: B.kt
val b = "B".apply {}
val c = "C"
// FILE: main.kt
fun box(): String {
return if (js("a") == "A" && js("typeof b") == "undefined" && js("typeof c") == "undefined")
"OK"
else "fail"
}
@@ -17634,6 +17634,11 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes
runTest("compiler/testData/codegen/box/properties/lazyInitialization.kt");
}
@TestMetadata("lazyInitializationPure.kt")
public void testLazyInitializationPure() throws Exception {
runTest("compiler/testData/codegen/box/properties/lazyInitializationPure.kt");
}
@TestMetadata("primitiveOverrideDefaultAccessor.kt")
public void testPrimitiveOverrideDefaultAccessor() throws Exception {
runTest("compiler/testData/codegen/box/properties/primitiveOverrideDefaultAccessor.kt");
@@ -17634,6 +17634,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
runTest("compiler/testData/codegen/box/properties/lazyInitialization.kt");
}
@TestMetadata("lazyInitializationPure.kt")
public void testLazyInitializationPure() throws Exception {
runTest("compiler/testData/codegen/box/properties/lazyInitializationPure.kt");
}
@TestMetadata("primitiveOverrideDefaultAccessor.kt")
public void testPrimitiveOverrideDefaultAccessor() throws Exception {
runTest("compiler/testData/codegen/box/properties/primitiveOverrideDefaultAccessor.kt");