[JS IR] IC improvements

- Reuse a built fragment
  - Use cache for saving built JS code
This commit is contained in:
Alexander Korepanov
2022-03-30 18:19:28 +03:00
committed by Space
parent f8ae097e50
commit 9952d43252
137 changed files with 1280 additions and 899 deletions
@@ -1 +1,39 @@
fun box() = Demo("test1").foo() + Demo("test2").foo_inline() + "${Demo("test3").field1}"
fun isEqual(l: Any?, r: Any?) = if (l == r) true else null
fun box(stepId: Int): String {
when (stepId) {
0 -> {
isEqual(Demo("test1").foo(), "foo test1") ?: return "Fail function"
isEqual(Demo("test2").foo_inline(), "inline foo test2") ?: return "Fail inline function"
isEqual(Demo("test3").field1, "field1") ?: return "Fail field"
}
1 -> {
isEqual(Demo("test1").foo(), "foo test1 update") ?: return "Fail function"
isEqual(Demo("test2").foo_inline(), "inline foo test2") ?: return "Fail inline function"
isEqual(Demo("test3").field1, "field1") ?: return "Fail field"
}
2, 3, 4 -> {
isEqual(Demo("test1").foo(), "foo test1 update") ?: return "Fail function"
isEqual(Demo("test2").foo_inline(), "inline foo test2 update") ?: return "Fail inline function"
isEqual(Demo("test3").field1, "field1") ?: return "Fail field"
}
5, 6, 7, 8, 9 -> {
isEqual(Demo("test1").foo(), "foo test1 update") ?: return "Fail function"
isEqual(Demo("test2").foo_inline(), "inline foo test2 update") ?: return "Fail inline function"
isEqual(Demo("test3").field1, "field1 update") ?: return "Fail field"
}
10 -> {
isEqual(Demo("test1").foo(), "foo test1 update") ?: return "Fail function"
isEqual(Demo("test2").foo_inline(), "inline foo test2 update") ?: return "Fail inline function"
isEqual(Demo("test3").field1, 77) ?: return "Fail field"
}
11 -> {
isEqual(Demo("test1").foo(), "foo test1 update") ?: return "Fail function"
isEqual(Demo("test2").foo_inline(), "inline foo test2 update") ?: return "Fail inline function"
isEqual(Demo("test3").field1, null) ?: return "Fail field"
}
else -> return "Unkown"
}
return "OK"
}
@@ -3,27 +3,11 @@ STEP 0:
dirty: m.kt
STEP 1:
dependencies: stdlib, lib1
STEP 2:
STEP 2..3:
dependencies: stdlib, lib1
dirty: m.kt
STEP 3:
dependencies: stdlib, lib1
dirty: m.kt
STEP 4:
dependencies: stdlib, lib1
STEP 5:
dependencies: stdlib, lib1
STEP 6:
dependencies: stdlib, lib1
STEP 7:
dependencies: stdlib, lib1
STEP 8:
dependencies: stdlib, lib1
STEP 9:
dependencies: stdlib, lib1
STEP 10:
dependencies: stdlib, lib1
dirty: m.kt
STEP 11:
STEP 4..9:
dependencies: stdlib, lib1
STEP 10..11:
dependencies: stdlib, lib1
dirty: m.kt