[JS IR] Add annotation for eager property initialization

This commit is contained in:
Ilya Goncharov
2021-09-16 19:18:39 +03:00
committed by Space
parent b5fb0d9f33
commit c2cf221965
7 changed files with 96 additions and 8 deletions
@@ -0,0 +1,27 @@
// TARGET_BACKEND: JS_IR
// DONT_TARGET_EXACT_BACKEND: WASM
// PROPERTY_LAZY_INITIALIZATION
// FILE: lib.kt
var z1 = false
var z2 = false
// FILE: lib2.kt
@OptIn(kotlin.ExperimentalStdlibApi::class)
@JsEagerInitialization
val x = foo()
private fun foo(): Int {
z1 = true
return 42
}
// Will be initialized since [x]'s initializer calls a function from the file.
val y = run { z2 = true; 117 }
// FILE: main.kt
fun box(): String {
return return if (z1 && z2) "OK" else "fail"
}
@@ -0,0 +1,22 @@
// TARGET_BACKEND: JS_IR
// DONT_TARGET_EXACT_BACKEND: WASM
// PROPERTY_LAZY_INITIALIZATION
// FILE: lib.kt
var z1 = false
var z2 = false
// FILE: lib2.kt
@OptIn(kotlin.ExperimentalStdlibApi::class)
@JsEagerInitialization
val x = run { z1 = true; 42 }
// Won't be initialized (cause no function from the file will be called during [x] initialization).
val y = run { z2 = true; 117 }
// FILE: main.kt
fun box(): String {
return if (z1 && !z2) "OK" else "fail"
}