[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,6 +1,53 @@
fun isEqual(l: Any?, r: Any?) = if (l == r) true else null
inline fun test1(x: () -> Any) = x()
fun test2(x: () -> Any) = x()
inline fun test3(x: () -> Any) = x()
fun box() = test1(::foo1).toString() + test2(::foo2).toString() + test3 { foo3() }.toString()
fun box(stepId: Int): String {
when (stepId) {
0 -> {
isEqual(test1(::foo1), "foo1") ?: return "Fail foo1"
isEqual(test2(::foo2), "foo2") ?: return "Fail foo2"
isEqual(test3 { foo3() }, "foo3") ?: return "Fail foo3"
}
1 -> {
isEqual(test1(::foo1), "foo1 update") ?: return "Fail foo1"
isEqual(test2(::foo2), "foo2") ?: return "Fail foo2"
isEqual(test3 { foo3() }, "foo3") ?: return "Fail foo3"
}
2 -> {
isEqual(test1(::foo1), "foo1 update") ?: return "Fail foo1"
isEqual(test2(::foo2), "foo2 update") ?: return "Fail foo2"
isEqual(test3 { foo3() }, "foo3") ?: return "Fail foo3"
}
3 -> {
isEqual(test1(::foo1), 77) ?: return "Fail foo1"
isEqual(test2(::foo2), "foo2 update") ?: return "Fail foo2"
isEqual(test3 { foo3() }, "foo3") ?: return "Fail foo3"
}
4 -> {
isEqual(test1(::foo1), 77) ?: return "Fail foo1"
isEqual(test2(::foo2), 88) ?: return "Fail foo2"
isEqual(test3 { foo3() }, "foo3") ?: return "Fail foo3"
}
5, 6 -> {
isEqual(test1(::foo1), 77) ?: return "Fail foo1"
isEqual(test2(::foo2), 88) ?: return "Fail foo2"
isEqual(test3 { foo3() }, "foo3 update") ?: return "Fail foo3"
}
7, 8 -> {
isEqual(test1(::foo1), 99) ?: return "Fail foo1"
isEqual(test2(::foo2), 88) ?: return "Fail foo2"
isEqual(test3 { foo3() }, "foo3 update") ?: return "Fail foo3"
}
9 -> {
isEqual(test1(::foo1), 88) ?: return "Fail foo1"
isEqual(test2(::foo2), 88) ?: return "Fail foo2"
isEqual(test3 { foo3() }, "foo3 update") ?: return "Fail foo3"
}
else -> return "Unknown"
}
return "OK"
}
@@ -1,28 +1,8 @@
STEP 0:
STEP 0..1:
dependencies: stdlib, lib1
dirty: m.kt
STEP 1:
dependencies: stdlib, lib1
STEP 2:
dependencies: stdlib, lib1
STEP 3:
dependencies: stdlib, lib1
dirty: m.kt
STEP 4:
dependencies: stdlib, lib1
dirty: m.kt
STEP 5:
dependencies: stdlib, lib1
dirty: m.kt
STEP 6:
dependencies: stdlib, lib1
dirty: m.kt
STEP 7:
dependencies: stdlib, lib1
dirty: m.kt
STEP 8:
dependencies: stdlib, lib1
dirty: m.kt
STEP 9:
STEP 3..9:
dependencies: stdlib, lib1
dirty: m.kt