backend: Allow fake nullables in FOR loops
This commit is contained in:
@@ -400,6 +400,13 @@ task codegen_controlflow_for_loops_coroutines(type: RunKonanTest) {
|
||||
"Got: 0 2 4 6\n"
|
||||
}
|
||||
|
||||
task codegen_controlflow_for_loops_let_with_nullable(type: RunKonanTest) {
|
||||
source = "codegen/controlflow/for_loops_let_with_nullable.kt"
|
||||
goldValue = "012345\n012345\n024\n01234\n01234\n024\n543210\n543210\n531\n" +
|
||||
"012345\n012345\n024\n01234\n01234\n024\n543210\n543210\n531\n" +
|
||||
"abcdef\nabcdef\nace\nabcde\nabcde\nace\nfedcba\nfedcba\nfdb\n"
|
||||
}
|
||||
|
||||
task codegen_controlflow_for_loops_call_order(type: RunKonanTest) {
|
||||
source = "codegen/controlflow/for_loops_call_order.kt"
|
||||
goldValue = "1234\n1234\n2134\n"
|
||||
|
||||
@@ -0,0 +1,151 @@
|
||||
package codegen.controlflow.for_loops_let_with_nullable
|
||||
|
||||
import kotlin.test.*
|
||||
|
||||
// Github issue #1012
|
||||
fun testInt(left: Int?, right: Int?, step: Int?) {
|
||||
right?.let {
|
||||
for (i in 0..it) { print(i) }
|
||||
}
|
||||
println()
|
||||
|
||||
left?.let {
|
||||
for (i in it..5) { print(i) }
|
||||
}
|
||||
println()
|
||||
|
||||
step?.let {
|
||||
for (i in 0..5 step it) { print(i) }
|
||||
}
|
||||
println()
|
||||
|
||||
right?.let {
|
||||
for (i in 0 until it) { print(i) }
|
||||
}
|
||||
println()
|
||||
|
||||
left?.let {
|
||||
for (i in it until 5) { print(i) }
|
||||
}
|
||||
println()
|
||||
|
||||
step?.let {
|
||||
for (i in 0 until 5 step it) { print(i) }
|
||||
}
|
||||
println()
|
||||
|
||||
right?.let {
|
||||
for (i in it downTo 0) { print(i) }
|
||||
}
|
||||
println()
|
||||
|
||||
left?.let {
|
||||
for (i in 5 downTo it) { print(i) }
|
||||
}
|
||||
println()
|
||||
|
||||
step?.let {
|
||||
for (i in 5 downTo 0 step it) { print(i) }
|
||||
}
|
||||
println()
|
||||
}
|
||||
|
||||
fun testLong(left: Long?, right: Long?, step: Long?) {
|
||||
right?.let {
|
||||
for (i in 0..it) { print(i) }
|
||||
}
|
||||
println()
|
||||
|
||||
left?.let {
|
||||
for (i in it..5) { print(i) }
|
||||
}
|
||||
println()
|
||||
|
||||
step?.let {
|
||||
for (i in 0..5L step it) { print(i) }
|
||||
}
|
||||
println()
|
||||
|
||||
right?.let {
|
||||
for (i in 0 until it) { print(i) }
|
||||
}
|
||||
println()
|
||||
|
||||
left?.let {
|
||||
for (i in it until 5) { print(i) }
|
||||
}
|
||||
println()
|
||||
|
||||
step?.let {
|
||||
for (i in 0 until 5L step it) { print(i) }
|
||||
}
|
||||
println()
|
||||
|
||||
right?.let {
|
||||
for (i in it downTo 0) { print(i) }
|
||||
}
|
||||
println()
|
||||
|
||||
left?.let {
|
||||
for (i in 5 downTo it) { print(i) }
|
||||
}
|
||||
println()
|
||||
|
||||
step?.let {
|
||||
for (i in 5 downTo 0L step it) { print(i) }
|
||||
}
|
||||
println()
|
||||
}
|
||||
|
||||
fun testChar(left: Char?, right: Char?, step: Int?) {
|
||||
right?.let {
|
||||
for (i in 'a'..it) { print(i) }
|
||||
}
|
||||
println()
|
||||
|
||||
left?.let {
|
||||
for (i in it..'f') { print(i) }
|
||||
}
|
||||
println()
|
||||
|
||||
step?.let {
|
||||
for (i in 'a'..'f' step it) { print(i) }
|
||||
}
|
||||
println()
|
||||
|
||||
right?.let {
|
||||
for (i in 'a' until it) { print(i) }
|
||||
}
|
||||
println()
|
||||
|
||||
left?.let {
|
||||
for (i in it until 'f') { print(i) }
|
||||
}
|
||||
println()
|
||||
|
||||
step?.let {
|
||||
for (i in 'a' until 'f' step it) { print(i) }
|
||||
}
|
||||
println()
|
||||
|
||||
right?.let {
|
||||
for (i in it downTo 'a') { print(i) }
|
||||
}
|
||||
println()
|
||||
|
||||
left?.let {
|
||||
for (i in 'f' downTo it) { print(i) }
|
||||
}
|
||||
println()
|
||||
|
||||
step?.let {
|
||||
for (i in 'f' downTo 'a' step it) { print(i) }
|
||||
}
|
||||
println()
|
||||
}
|
||||
|
||||
@Test fun runTest() {
|
||||
testInt(0, 5, 2)
|
||||
testLong(0, 5, 2)
|
||||
testChar('a', 'f', 2)
|
||||
}
|
||||
Reference in New Issue
Block a user