[Wasm] Move external RTT checkers to web.common and reuse in Wasm

#KT-56849
This commit is contained in:
Svyatoslav Kuzmich
2023-11-21 14:29:28 +01:00
committed by Space Team
parent d219d5380b
commit cf3b293072
24 changed files with 360 additions and 121 deletions
@@ -0,0 +1,8 @@
// FIR_IDENTICAL
// DIAGNOSTICS: +UNCHECKED_CAST_TO_EXTERNAL_INTERFACE
external interface I
fun box(a: Any, b: Any): Pair<I, I?> {
return Pair(<!UNCHECKED_CAST_TO_EXTERNAL_INTERFACE!>a as I<!>, <!UNCHECKED_CAST_TO_EXTERNAL_INTERFACE!>b as? I<!>)
}
@@ -0,0 +1,6 @@
// FIR_IDENTICAL
external interface I
fun box(a: Any, b: Any): Boolean {
return <!CANNOT_CHECK_FOR_EXTERNAL_INTERFACE!>a is I<!> && <!CANNOT_CHECK_FOR_EXTERNAL_INTERFACE!>b !is I<!>
}
@@ -0,0 +1,22 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -UNUSED_PARAMETER
inline fun <reified T> foo(x: T) {
println(x)
}
external interface I
external class C : I
operator inline fun <reified T> C.plus(other: T) = this
fun bar() {
foo(C())
val c: I = C()
<!EXTERNAL_INTERFACE_AS_REIFIED_TYPE_ARGUMENT!>foo(c)<!>
foo<<!EXTERNAL_INTERFACE_AS_REIFIED_TYPE_ARGUMENT!>I<!>>(C())
<!EXTERNAL_INTERFACE_AS_REIFIED_TYPE_ARGUMENT!>C() + c<!>
}
@@ -0,0 +1,8 @@
// FIR_IDENTICAL
external interface I
typealias TA = I
fun box() {
println(<!EXTERNAL_INTERFACE_AS_CLASS_LITERAL!>I::class<!>)
println(<!EXTERNAL_INTERFACE_AS_CLASS_LITERAL!>TA::class<!>)
}
@@ -0,0 +1,10 @@
// FIR_IDENTICAL
external interface I
external interface J
fun box(a: Any) = when (a) {
<!CANNOT_CHECK_FOR_EXTERNAL_INTERFACE!>is I<!> -> 0
<!CANNOT_CHECK_FOR_EXTERNAL_INTERFACE!>!is J<!> -> 1
else -> 2
}