KT-5075 Optimize array/collection indices usage in 'for' loop
Use specialized 'for' loop code generation strategy for loops over array indices and collection indices.
This commit is contained in:
Vendored
+19
@@ -0,0 +1,19 @@
|
||||
// WITH_RUNTIME
|
||||
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
fun Collection<Int>.sumIndices(): Int {
|
||||
var sum = 0
|
||||
for (i in indices) {
|
||||
sum += i
|
||||
}
|
||||
return sum
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val list = listOf(0, 0, 0, 0)
|
||||
val sum = list.sumIndices()
|
||||
assertEquals(6, sum)
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
// WITH_RUNTIME
|
||||
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
fun box(): String {
|
||||
var sum = 0
|
||||
for (i in listOf(0, 0, 0, 0).indices) {
|
||||
sum += i
|
||||
}
|
||||
assertEquals(6, sum)
|
||||
|
||||
return "OK"
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
// WITH_RUNTIME
|
||||
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
fun sumIndices(coll: Collection<*>?): Int {
|
||||
var sum = 0
|
||||
for (i in coll?.indices ?: return 0) {
|
||||
sum += i
|
||||
}
|
||||
return sum
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
assertEquals(6, sumIndices(listOf(0, 0, 0, 0)))
|
||||
assertEquals(0, sumIndices(null))
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
// WITH_RUNTIME
|
||||
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
fun box(): String {
|
||||
var sum = 0
|
||||
for (i in arrayOf("", "", "", "").indices) {
|
||||
sum += i
|
||||
}
|
||||
assertEquals(6, sum)
|
||||
|
||||
return "OK"
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
// WITH_RUNTIME
|
||||
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
fun box(): String {
|
||||
var sum = 0
|
||||
for (i in intArrayOf(0, 0, 0, 0).indices) {
|
||||
sum += i
|
||||
}
|
||||
assertEquals(6, sum)
|
||||
|
||||
return "OK"
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
// WITH_RUNTIME
|
||||
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
fun suppressBoxingOptimization(ni: Int?) {}
|
||||
|
||||
fun box(): String {
|
||||
var sum = 0
|
||||
for (i: Int? in arrayOf("", "", "", "").indices) {
|
||||
suppressBoxingOptimization(i)
|
||||
sum += i ?: 0
|
||||
}
|
||||
assertEquals(6, sum)
|
||||
|
||||
return "OK"
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
// WITH_RUNTIME
|
||||
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
fun suppressBoxingOptimization(ni: Int?) {}
|
||||
|
||||
fun box(): String {
|
||||
var sum = 0
|
||||
for (i: Int? in listOf("", "", "", "").indices) {
|
||||
suppressBoxingOptimization(i)
|
||||
sum += i ?: 0
|
||||
}
|
||||
assertEquals(6, sum)
|
||||
|
||||
return "OK"
|
||||
}
|
||||
Reference in New Issue
Block a user