[JS IR] Support nativeGetter, nativeSetter and nativeInvoke
#KT-41081 fixed
This commit is contained in:
+17
-15
@@ -1,40 +1,42 @@
|
||||
// IGNORE_BACKEND: JS_IR
|
||||
// IGNORE_BACKEND: JS_IR_ES6
|
||||
// EXPECTED_REACHABLE_NODES: 1286
|
||||
// EXPECTED_REACHABLE_NODES: 1244
|
||||
package foo
|
||||
|
||||
external class Function(vararg argsAndCode: String) {
|
||||
external fun Function(vararg argsAndCode: String): Function
|
||||
|
||||
external interface Function {
|
||||
@nativeInvoke
|
||||
operator fun invoke(a: Any?): Any? = definedExternally
|
||||
operator fun invoke(a: Any?): Any?
|
||||
|
||||
@nativeInvoke
|
||||
fun baz(a: Any?, b: Any?): Any? = definedExternally
|
||||
fun baz(a: Any?, b: Any? = definedExternally, c: Any? = definedExternally): Any?
|
||||
}
|
||||
|
||||
@nativeInvoke
|
||||
operator fun Function.invoke(a: Any?, b: Any?): Any? = definedExternally
|
||||
|
||||
@nativeInvoke
|
||||
fun Function.bar(a: Any?, b: Any?): Any? = definedExternally
|
||||
fun Function.bar(a: Any?, b: Any? = definedExternally, c: Any? = definedExternally): Any? = definedExternally
|
||||
|
||||
object t{}
|
||||
|
||||
fun box(): String {
|
||||
val f = Function("a", "return a")
|
||||
val g = Function("a", "b", "return a + b")
|
||||
val g = Function("a", "b", "c", "return a + (b || 10) + (c || 100)")
|
||||
|
||||
assertEquals(1, f(1))
|
||||
assertEquals("ok", f("ok"))
|
||||
assertEquals(t, f(t))
|
||||
|
||||
assertEquals(5, g(1, 4))
|
||||
assertEquals("ok34", g("ok", 34))
|
||||
assertEquals(105, g(1, 4))
|
||||
assertEquals("ok34100", g("ok", 34))
|
||||
|
||||
assertEquals(5, g.baz(1, 4))
|
||||
assertEquals("ok34", g.baz("ok", 34))
|
||||
assertEquals(105, g.baz(1, 4))
|
||||
assertEquals("ok34100", g.baz("ok", 34))
|
||||
assertEquals("ok1034", g.baz("ok", c = 34))
|
||||
|
||||
assertEquals(5, g.bar(1, 4))
|
||||
assertEquals("ok34", g.bar("ok", 34))
|
||||
assertEquals(105, g.bar(1, 4))
|
||||
assertEquals("ok34100", g.bar("ok", 34))
|
||||
assertEquals("ok1034", g.bar("ok", c = 34))
|
||||
|
||||
return "OK"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user