KT-944 iterations over empty ranges

This commit is contained in:
Alex Tkachman
2012-01-10 09:33:54 +02:00
parent ed58ca219b
commit a0134fb0f2
9 changed files with 43 additions and 1 deletions
@@ -536,7 +536,7 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> {
gen(expression.getLoopRange(), loopRangeType);
v.dup();
v.invokevirtual("jet/IntRange", "getStart", "()I");
v.invokevirtual("jet/IntRange", "getIteratorStart", "()I");
v.store(lookupLocal(parameterDescriptor), Type.INT_TYPE);
v.invokevirtual("jet/IntRange", "getEnd", "()I");
v.store(myEndVar, Type.INT_TYPE);
+10
View File
@@ -11,6 +11,8 @@ class IntRange(val start : Int, val size : Int) : Range<Int>, IntIterable {
val end : Int
val iteratorStart : Int
fun minus() : IntRange
fun step(step: Int) : IntIterator
@@ -23,6 +25,8 @@ class LongRange(val start : Long, val size : Long) : Range<Long>, LongIterable {
fun contains (elem: Long) : Boolean
val iteratorStart : Long
val end : Long
fun minus() : LongRange
@@ -39,6 +43,8 @@ class ByteRange(val start : Byte, val size : Int) : Range<Byte>, ByteIterable {
val end : Byte
val iteratorStart : Byte
fun minus() : ByteRange
fun step(step: Int) : ByteIterator
@@ -51,6 +57,8 @@ class ShortRange(val start : Short, val size : Int) : Range<Short>, ShortIterabl
fun contains (elem: Byte) : Boolean
val iteratorStart : Short
val end : Short
fun minus() : ShortRange
@@ -65,6 +73,8 @@ class CharRange(val start : Char, val size : Int) : Range<Char>, CharIterable {
fun contains (elem: Char) : Boolean
val iteratorStart : Char
val end : Char
fun minus() : CharRange
@@ -0,0 +1,8 @@
fun box() : String {
for (i in "".indices) {
""[i]
}
return "OK"
}
val String?.indices : IntRange get() = IntRange(0, this.sure().length)
@@ -379,4 +379,8 @@ public class PrimitiveTypesTest extends CodegenTestCase {
public void testKt930 () {
blackBoxFile("regressions/kt930.kt");
}
public void testKt944 () {
blackBoxFile("regressions/kt944.kt");
}
}
+4
View File
@@ -30,6 +30,10 @@ public final class ByteRange implements Range<Byte>, ByteIterable, JetObject {
return start;
}
public byte getIteratorStart () {
return count == 0 ? 1 : start;
}
public byte getEnd() {
return (byte) (count < 0 ? start + count + 1: count == 0 ? 0 : start+count-1);
}
+4
View File
@@ -30,6 +30,10 @@ public final class CharRange implements Range<Character>, CharIterable, JetObjec
return start;
}
public char getIteratorStart () {
return count == 0 ? 1 : start;
}
public char getEnd() {
return (char) (count < 0 ? start + count + 1: count == 0 ? 0 : start+count-1);
}
+4
View File
@@ -33,6 +33,10 @@ public final class IntRange implements Range<Integer>, IntIterable, JetObject {
return count < 0;
}
public int getIteratorStart () {
return count == 0 ? 1 : start;
}
public int getStart() {
return start;
}
+4
View File
@@ -37,6 +37,10 @@ public final class LongRange implements Range<Long>, LongIterable, JetObject {
return start;
}
public long getIteratorStart () {
return count == 0 ? 1 : start;
}
public long getEnd() {
return count < 0 ? start + count + 1: count == 0 ? 0 : start+count-1;
}
+4
View File
@@ -37,6 +37,10 @@ public final class ShortRange implements Range<Short>, ShortIterable, JetObject
return start;
}
public int getIteratorStart () {
return count == 0 ? 1 : start;
}
public short getEnd() {
return (short) (count < 0 ? start + count + 1: count == 0 ? 0 : start+count-1);
}