[JS IR] - Remove file lowering declarations from lowering phases

- rename fileToPurenessInitializers onto fileToInitializerPureness
- remove redundant check on top-level property

[JS IR] Rename initialis* to initializ* for consistency

[JS IR] Move propertyLazyInitialization property to context from configuration

[JS IR] Add test on lazy initialization properties order

[JS IR] Add multi module for lazy initialization of properties

[JS IR] Move tests onto js.translator

[JS IR] Rename fileToInitializerPureness according to context name

^KT-43222 fixed
This commit is contained in:
Ilya Goncharov
2020-11-19 13:22:22 +03:00
parent 1b5ebd83de
commit efee3ea648
24 changed files with 221 additions and 134 deletions
@@ -0,0 +1,18 @@
// IGNORE_BACKEND: JS
// DONT_TARGET_EXACT_BACKEND: WASM
// PROPERTY_LAZY_INITIALIZATION
// FILE: A.kt
val o = "O"
// FILE: B.kt
val ok = o + k
// FILE: C.kt
val k = "K"
// FILE: main.kt
fun box(): String = ok
@@ -0,0 +1,36 @@
// EXPECTED_REACHABLE_NODES: 1239
// DONT_TARGET_EXACT_BACKEND: WASM
// PROPERTY_LAZY_INITIALIZATION
// FILE: A.kt
val a = "A".let {
flag = !flag
if (flag) {
it
} else {
"!A"
}
}
val b = "B".let {
flag = !flag
if (!flag) {
it
} else {
"!B"
}
}
// FILE: B.kt
var flag: Boolean = false
// FILE: main.kt
fun box(): String {
return if (
a == "A" && b == "B"
)
"OK"
else "a = $a; b = ${b}"
}
@@ -0,0 +1,32 @@
// IGNORE_BACKEND: JS
// PROPERTY_LAZY_INITIALIZATION
// FILE: A.kt
val a = "A"
// FILE: B.kt
val b = "B".apply {}
val c = b
// FILE: C.kt
val d = "D".apply {}
val e = d
// FILE: main.kt
fun box(): String {
// Get only e to initialize all properties in file
e
return if (
js("a") === "A" &&
js("typeof b") == "undefined" &&
js("typeof c") == "undefined" &&
js("d") === "D" &&
js("e") === "D"
)
"OK"
else "a = ${js("a")}; typeof b = ${js("typeof b")}; typeof c = ${js("typeof c")}; d = ${js("d")}; e = ${js("e")}"
}
@@ -0,0 +1,22 @@
// IGNORE_BACKEND: JS
// DONT_TARGET_EXACT_BACKEND: WASM
// SPLIT_PER_MODULE
// PROPERTY_LAZY_INITIALIZATION
// MODULE: lib1
// FILE: A.kt
val o = "O"
// FILE: B.kt
val okCandidate = o + k
// FILE: C.kt
val k = "K"
// MODULE: lib2(lib1)
// FILE: lib2.kt
val ok = okCandidate
// MODULE: main(lib1, lib2)
// FILE: main.kt
fun box(): String = ok