[K/JS] Support eager initialization for per-file granularity

This commit is contained in:
Artem Kobzar
2023-09-06 09:27:28 +00:00
committed by Space Team
parent f203681ffa
commit bff433f4e9
22 changed files with 288 additions and 29 deletions
@@ -0,0 +1,28 @@
// TARGET_BACKEND: JS_IR
// IGNORE_BACKEND: WASM
// ES_MODULES
// PROPERTY_LAZY_INITIALIZATION
// FILE: lib.kt
var z1 = false
var z2 = false
// FILE: lib2.kt
@OptIn(kotlin.ExperimentalStdlibApi::class)
@EagerInitialization
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,23 @@
// TARGET_BACKEND: JS_IR
// IGNORE_BACKEND: WASM
// ES_MODULES
// PROPERTY_LAZY_INITIALIZATION
// FILE: lib.kt
var z1 = false
var z2 = false
// FILE: lib2.kt
@OptIn(kotlin.ExperimentalStdlibApi::class)
@EagerInitialization
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"
}
@@ -0,0 +1,19 @@
// TARGET_BACKEND: JS_IR
// IGNORE_BACKEND: WASM
// ES_MODULES
// PROPERTY_LAZY_INITIALIZATION
// FILE: lib.kt
var z1 = false
// FILE: lib2.kt
@OptIn(kotlin.ExperimentalStdlibApi::class)
@EagerInitialization
val x = run { z1 = !z1; 42 }
val y = run { 73 }
fun box(): String {
return if (z1) "OK" else "fail"
}
@@ -1,10 +1,18 @@
IGNORE_PER_FILE: true
MODULES: lib1, main
STEP 0:
libs: lib1, main
dirty js modules: lib1, main
STEP 1..3:
dirty js files: lib1/l1, lib1/l2, main/m, main/m.export, main
STEP 1:
libs: lib1, main
dirty js modules: lib1
dirty js files: lib1/l2, lib1, main
STEP 2:
libs: lib1, main
dirty js modules: lib1
dirty js files: lib1/l2
STEP 3:
libs: lib1, main
dirty js modules: lib1
dirty js files: lib1/l2, main