[JS IR] Use a backing field initializer for js() code folding

During a translation of the code from js() call to statement list,
 the compiler folds the code string. For that it uses property bodies.
 However the bodies can not be loaded in an incremental rebuild.
 The patch uses the backing field initializers of constant properties.
 The initializers are always loaded.

^KT-57002 Fixed
This commit is contained in:
Alexander Korepanov
2023-03-06 17:28:12 +01:00
committed by Space Team
parent c91ef606f7
commit f82d3e63a2
20 changed files with 129 additions and 4 deletions
@@ -0,0 +1,3 @@
fun test() : dynamic {
return js("var testObj = { $constKey: 0 }; testObj.$constKey")
}
@@ -0,0 +1,3 @@
fun test() : dynamic {
return js("var testObj = { $constKey: 1 }; testObj.$constKey")
}
@@ -0,0 +1,3 @@
fun test() : dynamic {
return js("var testObj = { $constKey: $constVal }; testObj.$constKey")
}
@@ -0,0 +1,3 @@
fun test() : dynamic {
return js("var testObj = { ${constKey1}__bar: $constVal + 1 }; testObj.foo__$constKey2")
}
@@ -0,0 +1,4 @@
internal const val constKey = "foo"
internal const val constVal = "2"
@@ -0,0 +1,7 @@
internal const val constKey1 = "foo"
internal const val constKey2 = "bar"
internal const val constKey = constKey1 + "_" + constKey2
internal const val constVal = "3"
@@ -0,0 +1,7 @@
internal const val constKey1 = "foo"
internal const val constKey2 = "bar"
internal const val constKey = constKey1 + "__" + constKey2
internal const val constVal = "4"
@@ -0,0 +1,7 @@
internal const val constKey1 = "foo"
internal const val constKey2 = "bar"
internal const val constKey = constKey1 + "__" + constKey2
internal const val constVal = 5
@@ -0,0 +1,38 @@
STEP 0:
modifications:
U : l1.0.kt -> l1.kt
U : js.0.kt -> js.kt
U : test.0.kt -> test.kt
added file: l1.kt, js.kt, test.kt
STEP 1:
modifications:
U : js.1.kt -> js.kt
modified ir: js.kt
STEP 2:
modifications:
U : js.2.kt -> js.kt
modified ir: js.kt
updated exports: l1.kt
STEP 3:
modifications:
U : l1.3.kt -> l1.kt
modified ir: l1.kt
updated imports: js.kt
STEP 4:
modifications:
U : test.4.kt -> test.kt
modified ir: test.kt
STEP 5:
modifications:
U : l1.5.kt -> l1.kt
modified ir: l1.kt
updated imports: js.kt
STEP 6:
modifications:
U : js.6.kt -> js.kt
modified ir: js.kt
updated exports: l1.kt
STEP 7:
modifications:
U : l1.7.kt -> l1.kt
modified ir: l1.kt, js.kt
@@ -0,0 +1 @@
fun doTest() = test()
@@ -0,0 +1 @@
fun doTest() = test() + 1
@@ -0,0 +1,8 @@
fun box(stepId: Int): String {
val x = doTest()
when (stepId) {
in 0..7 -> if (x != stepId) return "Fail, got $x"
else -> return "Unknown"
}
return "OK"
}
@@ -0,0 +1,5 @@
STEP 0:
dependencies: lib1
added file: m.kt
STEP 1..7:
dependencies: lib1
@@ -0,0 +1,8 @@
MODULES: lib1, main
STEP 0:
libs: lib1, main
dirty js: lib1, main
STEP 1..7:
libs: lib1, main
dirty js: lib1