| // FILE: main.kt | |
| fun foo(x: Int, y: Int, z: String): Int = js("x + y + Number(z)") | |
| val x: String = js("typeof 10") | |
| fun fooDefault(x: Int = 1, y: Int? = 2, z: String? = "3"): Int = | |
| js("x + y + Number(z)") | |
| external interface EIA | |
| external class EIB : EIA | |
| val eia10: EIA = js("'10'") | |
| val eib1000: EIB = js("new EIB()") | |
| fun <T : EIA> fooDefaultT(x: T? = null): T? = | |
| js("x") | |
| fun fooVararg(i: Int, vararg x: Int): Int = | |
| js("x[i]") | |
| fun box(): String { | |
| val res = foo(10, 20, z = "30") | |
| if (res != 60) return "Wrong foo: $res" | |
| if (x != "number") return "Wrong x: $x" | |
| if (fooDefault() != 6) return "Wrong fooDefault 1" | |
| if (fooDefault(x = 100, y = 200, z = "300") != 600) return "Wrong fooDefault 2" | |
| if (fooDefault(y = 200, z = "300") != 501) return "Wrong fooDefault 3" | |
| if (fooDefaultT<EIA>() != null) return "Wrong fooDefaultT 1" | |
| if (fooDefaultT<EIA>(eia10).toString() != "10") return "Wrong fooDefaultT 2" | |
| if (fooDefaultT<EIB>(eib1000).toString() != "1000") return "Wrong fooDefaultT 3" | |
| if (fooVararg(0, 1) != 1) return "Wrong fooVararg 1" | |
| if (fooVararg(2, 1, 2, 3) != 3) return "Wrong fooVararg 2" | |
| if (fooVararg(2, 1, *intArrayOf(2, 3)) != 3) return "Wrong fooVararg 3" | |
| return "OK" | |
| } | |
| // FILE: ext.js | |
| class EIB { | |
| toString() { | |
| return "1000" | |
| } | |
| } |