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,22 @@
|
||||
// EXPECTED_REACHABLE_NODES: 997
|
||||
// CHECK_NOT_CALLED_IN_SCOPE: function=toBoxedChar scope=box$lambda
|
||||
// CHECK_CALLED_IN_SCOPE: function=unboxChar scope=box$lambda
|
||||
// CHECK_CALLED_IN_SCOPE: function=toBoxedChar scope=box
|
||||
// CHECK_NOT_CALLED_IN_SCOPE: function=unboxChar scope=box
|
||||
|
||||
fun <T> bar(x: T, y: (T) -> Boolean): Boolean = y(x) && jsTypeOf(x.asDynamic()) != "number"
|
||||
|
||||
fun typeOf(x: dynamic) = js("typeof x")
|
||||
|
||||
fun box(): String {
|
||||
val f = { x: Char ->
|
||||
val a: Char = x
|
||||
val b: Any = x
|
||||
typeOf(a) == "number" && typeOf(b) == "object"
|
||||
}
|
||||
|
||||
if (!f('Q')) return "fail1"
|
||||
if (!bar('W', f)) return "fail2"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
Reference in New Issue
Block a user