[JS IR] Add test on initialization calling only once

This commit is contained in:
Ilya Goncharov
2021-09-20 15:25:43 +03:00
committed by Space
parent 01fbe6bacc
commit 4c0045b136
4 changed files with 29 additions and 2 deletions
@@ -284,8 +284,7 @@ private fun <T> IrDeclaration.withPersistentSafe(transform: IrDeclaration.() ->
} else null
private fun IrDeclaration.isCompatibleDeclaration(context: JsIrBackendContext) =
(this as? IrField)
?.correspondingProperty
correspondingProperty
?.hasAnnotation(context.intrinsics.jsEagerInitializationAnnotationSymbol) != true &&
withPersistentSafe { origin in compatibleOrigins } == true
@@ -0,0 +1,18 @@
// TARGET_BACKEND: JS_IR
// DONT_TARGET_EXACT_BACKEND: WASM
// PROPERTY_LAZY_INITIALIZATION
// FILE: lib.kt
var z1 = false
// FILE: lib2.kt
@OptIn(kotlin.ExperimentalStdlibApi::class)
@JsEagerInitialization
val x = run { z1 = !z1; 42 }
val y = run { 73 }
fun box(): String {
return if (z1) "OK" else "fail"
}
@@ -19852,6 +19852,11 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes
runTest("compiler/testData/codegen/box/properties/eagerInitializationGlobal2.kt");
}
@TestMetadata("eagerInitializationGlobal3.kt")
public void testEagerInitializationGlobal3() throws Exception {
runTest("compiler/testData/codegen/box/properties/eagerInitializationGlobal3.kt");
}
@TestMetadata("field.kt")
public void testField() throws Exception {
runTest("compiler/testData/codegen/box/properties/field.kt");
@@ -19258,6 +19258,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
runTest("compiler/testData/codegen/box/properties/eagerInitializationGlobal2.kt");
}
@TestMetadata("eagerInitializationGlobal3.kt")
public void testEagerInitializationGlobal3() throws Exception {
runTest("compiler/testData/codegen/box/properties/eagerInitializationGlobal3.kt");
}
@TestMetadata("field.kt")
public void testField() throws Exception {
runTest("compiler/testData/codegen/box/properties/field.kt");