[JS IR] Support function type interfaces in incremental cache infrastructure
The patch removes logic of generating extra IrFiles (fake file) into IrModuleFragment for the function type interfaces during klib deserialization, because IC infrastructure can not process files which do not exist in klib. Instead of adding extra IrFiles during deserialization, the empty files with required packages are added into Kotlin/JS stdlib physically. These files are used as containers for function type interface declarations. Since Kotlin/WASM uses the same klib loading infrastructure as Kotlin/JS, the the empty files are added into Kotlin/WASM stdlib as well. The patch also adds a check that IrModuleFagment has files only from klib. ^KT-55720 Fixed
This commit is contained in:
committed by
Space Team
parent
1c3c5417ad
commit
9324cf3360
@@ -0,0 +1,30 @@
|
||||
// IGNORE_BACKEND: JS
|
||||
|
||||
inline fun <reified T> handle(s: T): String {
|
||||
return "${T::class}"
|
||||
}
|
||||
|
||||
fun check(got: String, expected: String): String? {
|
||||
if (got != expected) {
|
||||
return "Failed; expected $expected, got $got"
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val s0: suspend () -> Unit = {}
|
||||
check(handle(s0), "class SuspendFunction0")?.let { return it }
|
||||
|
||||
val s1: suspend (String) -> Unit = {}
|
||||
check(handle(s1), "class SuspendFunction1")?.let { return it }
|
||||
|
||||
val s7: suspend (Any, Any, Any, Any, Any, Any, Any) -> Unit = { _, _, _, _, _, _, _ -> }
|
||||
check(handle(s7), "class SuspendFunction7")?.let { return it }
|
||||
|
||||
val s15: suspend (Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any) -> Unit
|
||||
= { _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ -> }
|
||||
check(handle(s15), "class SuspendFunction15")?.let { return it }
|
||||
|
||||
return "OK"
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user