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:
Dmitry Petrov
2016-06-15 11:11:47 +03:00
parent 3a8591a729
commit a17b0dd1b5
16 changed files with 409 additions and 3 deletions
@@ -0,0 +1,15 @@
// WITH_RUNTIME
fun Collection<Int>.sumIndices(): Int {
var sum = 0
for (i in indices) {
sum += i
}
return sum
}
// 0 iterator
// 0 getStart
// 0 getEnd
// 0 getFirst
// 0 getLast
@@ -0,0 +1,14 @@
// WITH_RUNTIME
fun test() {
var sum = 0
for (i in listOf(0, 0, 0, 0).indices) {
sum += i
}
}
// 0 iterator
// 0 getStart
// 0 getEnd
// 0 getFirst
// 0 getLast
@@ -0,0 +1,18 @@
// WITH_RUNTIME
import kotlin.test.assertEquals
fun test(coll: Collection<*>?): Int {
var sum = 0
for (i in coll?.indices ?: return 0) {
sum += i
}
return sum
}
// 0 iterator
// 0 getStart
// 0 getEnd
// 1 getIndices
// 1 getFirst
// 1 getLast
@@ -0,0 +1,14 @@
// WITH_RUNTIME
fun test() {
var sum = 0
for (i in arrayOf("", "", "", "").indices) {
sum += i
}
}
// 0 iterator
// 0 getStart
// 0 getEnd
// 0 getFirst
// 0 getLast
@@ -0,0 +1,14 @@
// WITH_RUNTIME
fun test() {
var sum = 0
for (i in intArrayOf(0, 0, 0, 0).indices) {
sum += i
}
}
// 0 iterator
// 0 getStart
// 0 getEnd
// 0 getFirst
// 0 getLast