Add mechanism for type coercion in JS
Use it for char boxing/unboxing and unit materialization. Possible to use for other purposes, for example, to add type checks to dynamics. See KT-18793, KT-17915, KT-19081, KT-18216, KT-12970, KT-17014, KT-13932, KT-13930
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
// EXPECTED_REACHABLE_NODES: 997
|
||||
fun foo(x: Any): String {
|
||||
return when (x) {
|
||||
is Char -> "char: ${x.toInt()}"
|
||||
else -> "other: $x"
|
||||
}
|
||||
}
|
||||
|
||||
fun bar(x: Any): String {
|
||||
return when (x) {
|
||||
is Char -> "char: ${x.baz()}"
|
||||
else -> "other: $x"
|
||||
}
|
||||
}
|
||||
|
||||
fun Char.baz(): Boolean = jsTypeOf(asDynamic()) == "number"
|
||||
|
||||
fun box(): String {
|
||||
val a = foo('0')
|
||||
if (a != "char: 48") return "fail1: $a"
|
||||
|
||||
val b = foo(23)
|
||||
if (b != "other: 23") return "fail2: $b"
|
||||
|
||||
val c = bar('0')
|
||||
if (c != "char: true") return "fail3: $c"
|
||||
|
||||
val d = bar(23)
|
||||
if (d != "other: 23") return "fail4: $d"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
Reference in New Issue
Block a user