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("'1000'") fun 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() != null) return "Wrong fooDefaultT 1" if (fooDefaultT(eia10).toString() != "10") return "Wrong fooDefaultT 2" if (fooDefaultT(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" }