[JS IR] Support nativeGetter, nativeSetter and nativeInvoke

#KT-41081 fixed
This commit is contained in:
Zalim Bashorov
2020-08-26 22:01:04 +03:00
parent c804319e65
commit ba846830c9
7 changed files with 97 additions and 57 deletions
@@ -1,5 +1,3 @@
// IGNORE_BACKEND: JS_IR
// IGNORE_BACKEND: JS_IR_ES6
// EXPECTED_REACHABLE_NODES: 1291
package foo
@@ -91,4 +89,4 @@ fun box(): String {
testExtensions(b, 5, undefined, t)
return "OK"
}
}
+17 -15
View File
@@ -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"
}
}