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:
@@ -1,20 +0,0 @@
|
||||
var log = ""
|
||||
|
||||
inline fun String.foo(a: String): Int {
|
||||
log += "foo1"
|
||||
return asDynamic().indexOf(a)
|
||||
}
|
||||
|
||||
inline fun String.foo(a: Char): Int {
|
||||
log += "foo2"
|
||||
return indexOf(a.toString())
|
||||
}
|
||||
|
||||
fun bar(a: String, b: Char, x: Int) {
|
||||
log += if (x > 0)
|
||||
23
|
||||
else
|
||||
a.foo(b)
|
||||
}
|
||||
|
||||
// LINES: 6 4 4 5 5 8 8 8 8 8 8 8 11 9 9 10 10 8 8 8 8 18 14 14 14 14 14 15 17 17 9 9 14 10 17 10 14 14 * 1 * 1
|
||||
+1
-1
@@ -27,4 +27,4 @@ fun bar(f: (Pair<String, String>) -> Unit) {
|
||||
}
|
||||
|
||||
|
||||
// LINES: 22 16 16 17 18 20 20 21 21 23 9 9 9 9 4 9 9 9 5 5 6 7 11 11 12 12 15 15 27 26 26 * 1 * 1
|
||||
// LINES: 22 16 16 17 18 20 20 21 21 22 22 23 9 9 9 9 4 9 9 9 5 5 6 7 11 11 12 12 15 15 27 26 26 * 1 * 1
|
||||
@@ -32,4 +32,4 @@ inline operator fun P.component1() = a
|
||||
|
||||
inline operator fun P.component2() = b
|
||||
|
||||
// LINES: 22 17 17 31 18 18 33 20 20 21 21 23 9 9 9 9 4 9 9 9 6 6 31 7 7 33 11 11 12 12 15 15 27 26 26 29 29 29 * 31 31 31 33 33 33 * 1 * 1
|
||||
// LINES: 22 17 17 31 18 18 33 20 20 21 21 22 22 23 9 9 9 9 4 9 9 9 6 6 31 7 7 33 11 11 12 12 15 15 27 26 26 29 29 29 * 31 31 31 33 33 33 * 1 * 1
|
||||
@@ -4,4 +4,4 @@ fun foo(x: Int): () -> Unit = {
|
||||
|
||||
fun bar() = 23
|
||||
|
||||
// LINES: 1 1 1 2 2 1 1 1 5 5 5
|
||||
// LINES: 1 1 1 2 2 3 3 1 1 1 5 5 5
|
||||
Reference in New Issue
Block a user