Correctly map container element type in intrinsic for withIndex
In case of arrays, we couldn't distinguish array of boxed Ints from array of primitive Ints. #KT-22904 Fixed Target versions 1.2.40
This commit is contained in:
+18
@@ -0,0 +1,18 @@
|
||||
// WITH_RUNTIME
|
||||
|
||||
val arr = byteArrayOf(10, 20, 30, 40)
|
||||
|
||||
fun foo(xs: Any): String {
|
||||
if (xs !is ByteArray) return "not a ByteArray"
|
||||
|
||||
val s = StringBuilder()
|
||||
for ((index, x) in xs.withIndex()) {
|
||||
s.append("$index:$x;")
|
||||
}
|
||||
return s.toString()
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val ss = foo(arr)
|
||||
return if (ss == "0:10;1:20;2:30;3:40;") "OK" else "fail: '$ss'"
|
||||
}
|
||||
Vendored
+12
@@ -0,0 +1,12 @@
|
||||
// WITH_RUNTIME
|
||||
|
||||
val arr = byteArrayOf(10, 20, 30, 40)
|
||||
|
||||
fun box(): String {
|
||||
val s = StringBuilder()
|
||||
for ((index, x) in arr.withIndex()) {
|
||||
s.append("$index:$x;")
|
||||
}
|
||||
val ss = s.toString()
|
||||
return if (ss == "0:10;1:20;2:30;3:40;") "OK" else "fail: '$ss'"
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
// WITH_RUNTIME
|
||||
|
||||
val arr = arrayOf(10, 20, 30, 40)
|
||||
|
||||
fun box(): String {
|
||||
val s = StringBuilder()
|
||||
for ((index, x) in arr.withIndex()) {
|
||||
s.append("$index:$x;")
|
||||
}
|
||||
val ss = s.toString()
|
||||
return if (ss == "0:10;1:20;2:30;3:40;") "OK" else "fail: '$ss'"
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
// WITH_RUNTIME
|
||||
|
||||
val arr = arrayOf(10, 20, 30, 40)
|
||||
|
||||
fun foo(xs: Any): String {
|
||||
if (xs !is Array<*>) return "not an Array<*>"
|
||||
|
||||
val s = StringBuilder()
|
||||
for ((index, x) in xs.withIndex()) {
|
||||
s.append("$index:$x;")
|
||||
}
|
||||
return s.toString()
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val ss = foo(arr)
|
||||
return if (ss == "0:10;1:20;2:30;3:40;") "OK" else "fail: '$ss'"
|
||||
}
|
||||
Vendored
+16
@@ -0,0 +1,16 @@
|
||||
// WITH_RUNTIME
|
||||
|
||||
val arr = arrayOf(10, 20, 30, 40)
|
||||
|
||||
fun <T : Number> foo(xs: Array<T>): String {
|
||||
val s = StringBuilder()
|
||||
for ((index, x) in xs.withIndex()) {
|
||||
s.append("$index:$x;")
|
||||
}
|
||||
return s.toString()
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val ss = foo(arr)
|
||||
return if (ss == "0:10;1:20;2:30;3:40;") "OK" else "fail: '$ss'"
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
// WITH_RUNTIME
|
||||
|
||||
val arr = intArrayOf(10, 20, 30, 40)
|
||||
|
||||
fun foo(xs: Any): String {
|
||||
if (xs !is IntArray) return "not an IntArray"
|
||||
|
||||
val s = StringBuilder()
|
||||
for ((index, x) in xs.withIndex()) {
|
||||
s.append("$index:$x;")
|
||||
}
|
||||
return s.toString()
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val ss = foo(arr)
|
||||
return if (ss == "0:10;1:20;2:30;3:40;") "OK" else "fail: '$ss'"
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
// WITH_RUNTIME
|
||||
|
||||
val arr = shortArrayOf(10, 20, 30, 40)
|
||||
|
||||
fun foo(xs: Any): String {
|
||||
if (xs !is ShortArray) return "not a ShortArray"
|
||||
|
||||
val s = StringBuilder()
|
||||
for ((index, x) in xs.withIndex()) {
|
||||
s.append("$index:$x;")
|
||||
}
|
||||
return s.toString()
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val ss = foo(arr)
|
||||
return if (ss == "0:10;1:20;2:30;3:40;") "OK" else "fail: '$ss'"
|
||||
}
|
||||
Vendored
+12
@@ -0,0 +1,12 @@
|
||||
// WITH_RUNTIME
|
||||
|
||||
val arr = shortArrayOf(10, 20, 30, 40)
|
||||
|
||||
fun box(): String {
|
||||
val s = StringBuilder()
|
||||
for ((index, x) in arr.withIndex()) {
|
||||
s.append("$index:$x;")
|
||||
}
|
||||
val ss = s.toString()
|
||||
return if (ss == "0:10;1:20;2:30;3:40;") "OK" else "fail: '$ss'"
|
||||
}
|
||||
Reference in New Issue
Block a user