KT-944 iterations over empty ranges
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user