[JS IR] Eager initialisation for all pure properties
^KT-43222 fixed
This commit is contained in:
+8
-1
@@ -40,7 +40,14 @@ class PropertyLazyInitLowering(private val context: JsIrBackendContext) : FileLo
|
|||||||
|
|
||||||
val fieldToInitializer = calculateFieldToExpression(
|
val fieldToInitializer = calculateFieldToExpression(
|
||||||
functions
|
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
|
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"
|
||||||
|
}
|
||||||
Generated
+5
@@ -17634,6 +17634,11 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes
|
|||||||
runTest("compiler/testData/codegen/box/properties/lazyInitialization.kt");
|
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")
|
@TestMetadata("primitiveOverrideDefaultAccessor.kt")
|
||||||
public void testPrimitiveOverrideDefaultAccessor() throws Exception {
|
public void testPrimitiveOverrideDefaultAccessor() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/properties/primitiveOverrideDefaultAccessor.kt");
|
runTest("compiler/testData/codegen/box/properties/primitiveOverrideDefaultAccessor.kt");
|
||||||
|
|||||||
Generated
+5
@@ -17634,6 +17634,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
|
|||||||
runTest("compiler/testData/codegen/box/properties/lazyInitialization.kt");
|
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")
|
@TestMetadata("primitiveOverrideDefaultAccessor.kt")
|
||||||
public void testPrimitiveOverrideDefaultAccessor() throws Exception {
|
public void testPrimitiveOverrideDefaultAccessor() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/properties/primitiveOverrideDefaultAccessor.kt");
|
runTest("compiler/testData/codegen/box/properties/primitiveOverrideDefaultAccessor.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user