[K/JS] Rework main function call to support it in per-file

This commit is contained in:
Artem Kobzar
2023-10-04 12:13:20 +00:00
committed by Space Team
parent faae5f9b38
commit eef57f216c
57 changed files with 1091 additions and 172 deletions
@@ -0,0 +1,7 @@
package foo.bar
var ok = "Fail"
fun main() {
ok = "OK"
}
@@ -0,0 +1,20 @@
package foo.bar
var ok = "OK"
fun main(args: Array<Int>) {
ok += "Fail Int"
}
fun main(args: Array<in String>) {
ok += "Fail IN"
}
fun main(args: Array<String>): Unit? {
ok += "Fail return Unit?"
return Unit
}
fun Any.main(args: Array<String>) {
ok += "Fail Any.main(...)"
}
@@ -0,0 +1,19 @@
package foo.bar
import kotlin.coroutines.*
var ok: String = "fail"
var callback: () -> Unit = {}
suspend fun main(args: Array<String>) {
if (0 != args.size) error("Fail")
suspendCoroutine<Unit> { cont ->
callback = {
cont.resume(Unit)
}
}
ok = "OK"
}
@@ -0,0 +1,11 @@
package foo.bar
var ok = "fail"
fun main(args: Array<String>) {
if (args.size != 0) {
ok = "Fail with args zie"
} else {
ok = "OK"
}
}
@@ -0,0 +1,7 @@
package foo
import foo.bar.ok
fun main() {
ok = "OK2"
}
@@ -0,0 +1,10 @@
var ok = "Fail"
fun main() {
ok = "OK"
}
fun box(stepId: Int): String {
return when (stepId) {
0 -> ok
else -> "Unknown"
}
}
@@ -0,0 +1,13 @@
import foo.bar.ok
fun box(stepId: Int): String {
return when (stepId) {
0 -> ok
1 -> ok
2 -> ok
3 -> ok
4 -> ok
5 -> if (ok != "OK2") "Fail" else "OK"
else -> "Unknown"
}
}
@@ -0,0 +1,18 @@
import foo.bar.ok
import foo.bar.callback
fun box(stepId: Int): String {
return when (stepId) {
0 -> ok
1 -> ok
2 -> ok
3 -> {
if (ok != "fail") return "Fail"
callback()
ok
}
4 -> ok
5 -> if (ok != "OK2") "Fail" else "OK"
else -> "Unknown"
}
}
@@ -0,0 +1,13 @@
import foo.bar.ok
fun box(stepId: Int): String {
return when (stepId) {
0 -> ok
1 -> ok
2 -> ok
3 -> ok
4 -> ok
5 -> if (ok != "OK2") "Fail" else "OK"
else -> "Unknown"
}
}
@@ -0,0 +1,29 @@
STEP 0:
modifications:
U : m.0.kt -> m.kt
added file: m.kt
STEP 1:
modifications:
U : m.1.kt -> m.kt
U : f.1.kt -> f.kt
added file: f.kt
modified ir: m.kt
STEP 2:
modifications:
U : f.2.kt -> f.kt
modified ir: f.kt
STEP 3:
modifications:
U : f.3.kt -> f.kt
U : m.3.kt -> m.kt
modified ir: f.kt, m.kt
STEP 4:
modifications:
U : f.4.kt -> f.kt
U : m.4.kt -> m.kt
modified ir: f.kt, m.kt
STEP 5:
modifications:
U : l.5.kt -> l.kt
added file: l.kt
updated exports: f.kt
@@ -0,0 +1,27 @@
MODULES: main
CALL_MAIN: true
STEP 0:
libs: main
dirty js modules: main
dirty js files: main/m, main/m.export, main
STEP 1:
libs: main
dirty js modules: main
dirty js files: main/foo/bar/f, main/m, main
STEP 2:
libs: main
dirty js modules: main
dirty js files: main/foo/bar/f, main
STEP 3:
libs: main
dirty js modules: main
dirty js files: main/foo/bar/f, main/m, main
STEP 4:
libs: main
dirty js modules: main
dirty js files: main/foo/bar/f, main/m, main
STEP 5:
libs: main
dirty js modules: main
dirty js files: main/foo/l, main/foo/bar/f, main