Multi-declarations supported in all flavours of for loops

(KT-2635 Support iteration with multiple range variable in JVM back-end)
 #KT-2635 Fixed
This commit is contained in:
Andrey Breslav
2012-08-31 12:32:07 +04:00
parent f1c4ab7188
commit ce1320bab3
46 changed files with 1603 additions and 74 deletions
@@ -0,0 +1,38 @@
class Range(val from : C, val to: C) {
fun iterator() = It(from, to)
}
class It(val from: C, val to: C) {
var c = from.i
fun next(): C {
val next = C(c)
c++
return next
}
fun hasNext(): Boolean = c <= to.i
}
class C(val i : Int) {
fun component1() = i + 1
fun component2() = i + 2
fun rangeTo(c: C) = Range(this, c)
}
fun doTest(): String {
var s = ""
for ((a, b) in C(0).rangeTo(C(2))) {
s += "$a:$b;"
}
return s
}
fun box(): String {
val s = doTest()
return if (s == "1:2;2:3;3:4;") "OK" else "fail: $s"
}
fun main(args: Array<String>) {
println(box())
}
@@ -0,0 +1,34 @@
class Range(val from : C, val to: C) {
fun iterator() = It(from, to)
}
class It(val from: C, val to: C) {
var c = from.i
fun next(): C {
val next = C(c)
c++
return next
}
fun hasNext(): Boolean = c <= to.i
}
class C(val i : Int) {
fun rangeTo(c: C) = Range(this, c)
}
fun C.component1() = i + 1
fun C.component2() = i + 2
fun doTest(): String {
var s = ""
for ((a, b) in C(0).rangeTo(C(2))) {
s += "$a:$b;"
}
return s
}
fun box(): String {
val s = doTest()
return if (s == "1:2;2:3;3:4;") "OK" else "fail: $s"
}
@@ -0,0 +1,38 @@
class Range(val from : C, val to: C) {
fun iterator() = It(from, to)
}
class It(val from: C, val to: C) {
var c = from.i
fun next(): C {
val next = C(c)
c++
return next
}
fun hasNext(): Boolean = c <= to.i
}
class C(val i : Int) {
fun rangeTo(c: C) = Range(this, c)
}
class M {
fun C.component1() = i + 1
fun C.component2() = i + 2
fun doTest(): String {
var s = ""
for ((a, b) in C(0).rangeTo(C(2))) {
s += "$a:$b;"
}
return s
}
}
fun box(): String {
val s = M().doTest()
return if (s == "1:2;2:3;3:4;") "OK" else "fail: $s"
}
@@ -0,0 +1,41 @@
class Range(val from : C, val to: C) {
fun iterator() = It(from, to)
}
class It(val from: C, val to: C) {
var c = from.i
fun next(): C {
val next = C(c)
c++
return next
}
fun hasNext(): Boolean = c <= to.i
}
class C(val i : Int) {
fun rangeTo(c: C) = Range(this, c)
}
class M {
fun C.component1() = i + 1
fun C.component2() = i + 2
}
fun M.doTest(): String {
var s = ""
for ((a, b) in C(0).rangeTo(C(2))) {
s += "$a:$b;"
}
return s
}
fun box(): String {
val s = M().doTest()
return if (s == "1:2;2:3;3:4;") "OK" else "fail: $s"
}
fun main(args: Array<String>) {
println(box())
}
@@ -0,0 +1,34 @@
class Range(val from : C, val to: C) {
fun iterator() = It(from, to)
}
class It(val from: C, val to: C) {
var c = from.i
fun next(): C {
val next = C(c)
c++
return next
}
fun hasNext(): Boolean = c <= to.i
}
class C(val i : Int) {
fun component1() = i + 1
fun component2() = i + 2
fun rangeTo(c: C) = Range(this, c)
}
fun doTest(): String {
var s = ""
for ((a, b) in C(0).rangeTo(C(2))) {
s += {"$a:$b;"}()
}
return s
}
fun box(): String {
val s = doTest()
return if (s == "1:2;2:3;3:4;") "OK" else "fail: $s"
}
@@ -0,0 +1,15 @@
fun Int.component1() = this + 1
fun Int.component2() = this + 2
fun doTest(): String {
var s = ""
for ((a, b) in 0.rangeTo(2)) {
s += "$a:$b;"
}
return s
}
fun box(): String {
val s = doTest()
return if (s == "1:2;2:3;3:4;") "OK" else "fail: $s"
}
@@ -0,0 +1,15 @@
fun Int.component1() = this + 1
fun Int.component2() = this + 2
fun doTest(): String {
var s = ""
for ((a, b) in 0.rangeTo(2)) {
s += {"$a:$b;"}()
}
return s
}
fun box(): String {
val s = doTest()
return if (s == "1:2;2:3;3:4;") "OK" else "fail: $s"
}
@@ -0,0 +1,17 @@
class M {
fun Int.component1() = this + 1
fun Int.component2() = this + 2
fun doTest(): String {
var s = ""
for ((a, b) in 0.rangeTo(2)) {
s += "$a:$b;"
}
return s
}
}
fun box(): String {
val s = M().doTest()
return if (s == "1:2;2:3;3:4;") "OK" else "fail: $s"
}
@@ -0,0 +1,17 @@
class M {
fun Int.component1() = this + 1
fun Int.component2() = this + 2
}
fun M.doTest(): String {
var s = ""
for ((a, b) in 0.rangeTo(2)) {
s += "$a:$b;"
}
return s
}
fun box(): String {
val s = M().doTest()
return if (s == "1:2;2:3;3:4;") "OK" else "fail: $s"
}
@@ -0,0 +1,23 @@
fun f(l : Long) {
l rangeTo l
}
fun box(): String {
return "OK"
}
//fun Long.component1() = this + 1
//fun Long.component2() = this + 2
//
//fun doTest(): String {
// var s = ""
// for ((a, b) in 0.toLong().rangeTo(2.toLong())) {
// s += "$a:$b;"
// }
// return s
//}
//
//fun box(): String {
// val s = doTest()
// return if (s == "1:2;2:3;3:4;") "OK" else "fail: $s"
//}
@@ -0,0 +1,15 @@
fun Long.component1() = this + 1
fun Long.component2() = this + 2
fun doTest(): String {
var s = ""
for ((a, b) in 0.toLong().rangeTo(2.toLong())) {
s += {"$a:$b;"}()
}
return s
}
fun box(): String {
val s = doTest()
return if (s == "1:2;2:3;3:4;") "OK" else "fail: $s"
}
@@ -0,0 +1,17 @@
class M {
fun Long.component1() = this + 1
fun Long.component2() = this + 2
fun doTest(): String {
var s = ""
for ((a, b) in 0.toLong().rangeTo(2.toLong())) {
s += "$a:$b;"
}
return s
}
}
fun box(): String {
val s = M().doTest()
return if (s == "1:2;2:3;3:4;") "OK" else "fail: $s"
}
@@ -0,0 +1,17 @@
class M {
fun Long.component1() = this + 1
fun Long.component2() = this + 2
}
fun M.doTest(): String {
var s = ""
for ((a, b) in 0.toLong().rangeTo(2.toLong())) {
s += "$a:$b;"
}
return s
}
fun box(): String {
val s = M().doTest()
return if (s == "1:2;2:3;3:4;") "OK" else "fail: $s"
}