Dropped *Range.isReversed
This commit is contained in:
@@ -828,8 +828,7 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> implem
|
||||
|
||||
private class ForInIntRangeInstanceLoopGenerator extends AbstractForLoopGenerator {
|
||||
private int indexVar;
|
||||
private int countVar;
|
||||
private int deltaVar;
|
||||
private int endVar;
|
||||
|
||||
private ForInIntRangeInstanceLoopGenerator(
|
||||
@NotNull JetForExpression forExpression
|
||||
@@ -844,34 +843,21 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> implem
|
||||
Type asmLoopRangeType = asmType(loopRangeType);
|
||||
gen(forExpression.getLoopRange(), asmLoopRangeType);
|
||||
v.dup();
|
||||
v.dup();
|
||||
|
||||
indexVar = myFrameMap.enterTemp(Type.INT_TYPE);
|
||||
v.invokevirtual(JET_INT_RANGE_TYPE.getInternalName(), "getStart", "()I");
|
||||
v.store(indexVar, Type.INT_TYPE);
|
||||
|
||||
countVar = myFrameMap.enterTemp(Type.INT_TYPE);
|
||||
v.invokevirtual(JET_INT_RANGE_TYPE.getInternalName(), "getSize", "()I");
|
||||
v.store(countVar, Type.INT_TYPE);
|
||||
|
||||
deltaVar = myFrameMap.enterTemp(Type.INT_TYPE);
|
||||
v.invokevirtual(JET_INT_RANGE_TYPE.getInternalName(), "getIsReversed", "()Z");
|
||||
Label down = new Label();
|
||||
|
||||
v.ifne(down);
|
||||
v.iconst(1);
|
||||
Label initEnd = new Label();
|
||||
v.goTo(initEnd);
|
||||
v.mark(down);
|
||||
v.iconst(-1);
|
||||
v.mark(initEnd);
|
||||
v.store(deltaVar, Type.INT_TYPE);
|
||||
endVar = myFrameMap.enterTemp(Type.INT_TYPE);
|
||||
v.invokevirtual(JET_INT_RANGE_TYPE.getInternalName(), "getEnd", "()I");
|
||||
v.store(endVar, Type.INT_TYPE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void conditionAndJump(@NotNull Label loopExit) {
|
||||
v.load(countVar, Type.INT_TYPE);
|
||||
v.ifeq(loopExit);
|
||||
v.load(indexVar, Type.INT_TYPE);
|
||||
v.load(endVar, Type.INT_TYPE);
|
||||
v.ificmpgt(loopExit);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -883,18 +869,13 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> implem
|
||||
|
||||
@Override
|
||||
public void afterBody() {
|
||||
v.load(indexVar, Type.INT_TYPE);
|
||||
v.load(deltaVar, Type.INT_TYPE);
|
||||
v.add(Type.INT_TYPE);
|
||||
v.store(indexVar, Type.INT_TYPE);
|
||||
v.iinc(countVar, -1);
|
||||
v.iinc(indexVar, 1);
|
||||
super.afterBody();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterLoop() {
|
||||
myFrameMap.leaveTemp(Type.INT_TYPE); // deltaVar
|
||||
myFrameMap.leaveTemp(Type.INT_TYPE); // countVar
|
||||
myFrameMap.leaveTemp(Type.INT_TYPE); // endVar
|
||||
myFrameMap.leaveTemp(Type.INT_TYPE); // indexVar
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,8 +13,6 @@ public class IntRange(public val start : Int, public val size : Int) : Range<Int
|
||||
|
||||
public fun step(step: Int) : IntIterator
|
||||
|
||||
public val isReversed : Boolean
|
||||
|
||||
public class object {
|
||||
public val EMPTY: IntRange
|
||||
}
|
||||
@@ -29,8 +27,6 @@ public class LongRange(public val start : Long, public val size : Long) : Range<
|
||||
|
||||
public fun step(step: Long) : LongIterator
|
||||
|
||||
public val isReversed : Boolean
|
||||
|
||||
public class object {
|
||||
public val EMPTY: LongRange
|
||||
}
|
||||
@@ -45,8 +41,6 @@ public class ByteRange(public val start : Byte, public val size : Int) : Range<B
|
||||
|
||||
public fun step(step: Int) : ByteIterator
|
||||
|
||||
public val isReversed : Boolean
|
||||
|
||||
public class object {
|
||||
public val EMPTY: ByteRange
|
||||
}
|
||||
@@ -61,8 +55,6 @@ public class ShortRange(public val start : Short, public val size : Int) : Range
|
||||
|
||||
public fun step(step: Int) : ShortIterator
|
||||
|
||||
public val isReversed : Boolean
|
||||
|
||||
public class object {
|
||||
public val EMPTY: ShortRange
|
||||
}
|
||||
@@ -77,8 +69,6 @@ public class CharRange(public val start : Char, public val size : Int) : Range<C
|
||||
|
||||
public fun step(step: Int) : CharIterator
|
||||
|
||||
public val isReversed : Boolean
|
||||
|
||||
public class object {
|
||||
public val EMPTY: CharRange
|
||||
}
|
||||
@@ -91,8 +81,6 @@ public class FloatRange(public val start : Float, public val size : Float) : Ran
|
||||
|
||||
public fun step(step: Float) : FloatIterator
|
||||
|
||||
public val isReversed : Boolean
|
||||
|
||||
public class object {
|
||||
public val EMPTY: FloatRange
|
||||
}
|
||||
@@ -105,8 +93,6 @@ public class DoubleRange(public val start : Double, public val size : Double) :
|
||||
|
||||
public fun step(step: Double) : DoubleIterator
|
||||
|
||||
public val isReversed : Boolean
|
||||
|
||||
public class object {
|
||||
public val EMPTY: DoubleRange
|
||||
}
|
||||
|
||||
@@ -150,7 +150,6 @@ public abstract class ByteIterator : jet.Iterator<jet.Byte> {
|
||||
public final class ByteRange : jet.Range<jet.Byte>, jet.ByteIterable {
|
||||
public constructor ByteRange(/*0*/ start : jet.Byte, /*1*/ size : jet.Int)
|
||||
public final val end : jet.Byte
|
||||
public final val isReversed : jet.Boolean
|
||||
public final val size : jet.Int
|
||||
public final val start : jet.Byte
|
||||
public open override /*1*/ fun contains(/*0*/ elem : jet.Byte) : jet.Boolean
|
||||
@@ -242,7 +241,6 @@ public abstract class CharIterator : jet.Iterator<jet.Char> {
|
||||
public final class CharRange : jet.Range<jet.Char>, jet.CharIterable {
|
||||
public constructor CharRange(/*0*/ start : jet.Char, /*1*/ size : jet.Int)
|
||||
public final val end : jet.Char
|
||||
public final val isReversed : jet.Boolean
|
||||
public final val size : jet.Int
|
||||
public final val start : jet.Char
|
||||
public open override /*1*/ fun contains(/*0*/ elem : jet.Char) : jet.Boolean
|
||||
@@ -365,7 +363,6 @@ public abstract class DoubleIterator : jet.Iterator<jet.Double> {
|
||||
public final class DoubleRange : jet.Range<jet.Double> {
|
||||
public constructor DoubleRange(/*0*/ start : jet.Double, /*1*/ size : jet.Double)
|
||||
public final val end : jet.Double
|
||||
public final val isReversed : jet.Boolean
|
||||
public final val size : jet.Double
|
||||
public final val start : jet.Double
|
||||
public open override /*1*/ fun contains(/*0*/ elem : jet.Double) : jet.Boolean
|
||||
@@ -587,7 +584,6 @@ public abstract class FloatIterator : jet.Iterator<jet.Float> {
|
||||
public final class FloatRange : jet.Range<jet.Float> {
|
||||
public constructor FloatRange(/*0*/ start : jet.Float, /*1*/ size : jet.Float)
|
||||
public final val end : jet.Float
|
||||
public final val isReversed : jet.Boolean
|
||||
public final val size : jet.Float
|
||||
public final val start : jet.Float
|
||||
public open override /*1*/ fun contains(/*0*/ elem : jet.Float) : jet.Boolean
|
||||
@@ -815,7 +811,6 @@ public abstract class IntIterator : jet.Iterator<jet.Int> {
|
||||
public final class IntRange : jet.Range<jet.Int>, jet.IntIterable {
|
||||
public constructor IntRange(/*0*/ start : jet.Int, /*1*/ size : jet.Int)
|
||||
public final val end : jet.Int
|
||||
public final val isReversed : jet.Boolean
|
||||
public final val size : jet.Int
|
||||
public final val start : jet.Int
|
||||
public open override /*1*/ fun contains(/*0*/ elem : jet.Int) : jet.Boolean
|
||||
@@ -960,7 +955,6 @@ public abstract class LongIterator : jet.Iterator<jet.Long> {
|
||||
public final class LongRange : jet.Range<jet.Long>, jet.LongIterable {
|
||||
public constructor LongRange(/*0*/ start : jet.Long, /*1*/ size : jet.Long)
|
||||
public final val end : jet.Long
|
||||
public final val isReversed : jet.Boolean
|
||||
public final val size : jet.Long
|
||||
public final val start : jet.Long
|
||||
public open override /*1*/ fun contains(/*0*/ elem : jet.Long) : jet.Boolean
|
||||
@@ -1222,7 +1216,6 @@ public abstract class ShortIterator : jet.Iterator<jet.Short> {
|
||||
public final class ShortRange : jet.Range<jet.Short>, jet.ShortIterable {
|
||||
public constructor ShortRange(/*0*/ start : jet.Short, /*1*/ size : jet.Int)
|
||||
public final val end : jet.Short
|
||||
public final val isReversed : jet.Boolean
|
||||
public final val size : jet.Int
|
||||
public final val start : jet.Short
|
||||
public open override /*1*/ fun contains(/*0*/ elem : jet.Short) : jet.Boolean
|
||||
|
||||
@@ -1,24 +1,24 @@
|
||||
fun box() : String {
|
||||
val r1 = IntRange(1, 4)
|
||||
if(r1.end != 4 || r1.isReversed || r1.size != 4) return "fail"
|
||||
if(r1.end != 4 || r1.size != 4) return "fail"
|
||||
|
||||
val r2 = ByteRange(1, 4)
|
||||
if(r2.end != 4.toByte() || r2.isReversed || r2.size != 4) return "fail"
|
||||
if(r2.end != 4.toByte() || r2.size != 4) return "fail"
|
||||
|
||||
val r3 = ShortRange(1, 4)
|
||||
if(r3.end != 4.toShort() || r3.isReversed || r3.size != 4) return "fail"
|
||||
if(r3.end != 4.toShort() || r3.size != 4) return "fail"
|
||||
|
||||
val r4 = CharRange('a', 4)
|
||||
if(r4.end != 'd' || r4.isReversed || r4.size != 4) return "fail"
|
||||
if(r4.end != 'd' || r4.size != 4) return "fail"
|
||||
|
||||
val r5 = FloatRange(0.0.toFloat(), 1.0.toFloat())
|
||||
if(r5.end != 1.0.toFloat() || r5.isReversed || r5.size != 1.0.toFloat()) return "fail"
|
||||
if(r5.end != 1.0.toFloat() || r5.size != 1.0.toFloat()) return "fail"
|
||||
|
||||
val r6 = DoubleRange(0.0, 1.0)
|
||||
if(r6.end != 1.0 || r6.isReversed || r6.size != 1.0) return "fail"
|
||||
if(r6.end != 1.0 || r6.size != 1.0) return "fail"
|
||||
|
||||
val r7 = LongRange(1, 4)
|
||||
if(r7.end != 4.toLong() || r7.isReversed || r7.size != 4.toLong()) return "fail"
|
||||
if(r7.end != 4.toLong() || r7.size != 4.toLong()) return "fail"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
|
||||
@@ -1,31 +1,31 @@
|
||||
fun testInt () : String {
|
||||
val r1 = 1 rangeTo 4
|
||||
if(r1.end != 4 || r1.isReversed || r1.size != 4) return "int rangeTo fail"
|
||||
if(r1.end != 4 || r1.size != 4) return "int rangeTo fail"
|
||||
|
||||
val r2 = 4 rangeTo 1
|
||||
if(r2.start != 0 || r2.size != 0) return "int negative rangeTo fail"
|
||||
|
||||
val r3 = 5 downTo 0
|
||||
if(r3.start != 5 || r3.end != 0 || !r3.isReversed || r3.size != 6) return "int downTo fail"
|
||||
if(r3.start != 5 || r3.end != 0 || r3.size != 6) return "int downTo fail"
|
||||
|
||||
val r4 = 5 downTo 6
|
||||
if(r4.start != 0 || r4.end != 0 || !r3.isReversed || r4.size != 0) return "int negative downTo fail"
|
||||
if(r4.start != 0 || r4.end != 0 || r4.size != 0) return "int negative downTo fail"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
|
||||
fun testByte () : String {
|
||||
val r1 = 1.toByte() rangeTo 4.toByte()
|
||||
if(r1.end != 4.toByte() || r1.isReversed || r1.size != 4) return "byte rangeTo fail"
|
||||
if(r1.end != 4.toByte() || r1.size != 4) return "byte rangeTo fail"
|
||||
|
||||
val r2 = 4.toByte() rangeTo 1.toByte()
|
||||
if(r2.start != 0.toByte() || r2.size != 0) return "byte negative rangeTo fail"
|
||||
|
||||
val r3 = 5.toByte() downTo 0.toByte()
|
||||
if(r3.start != 5.toByte() || r3.end != 0.toByte() || !r3.isReversed || r3.size != 6) return "byte downTo fail"
|
||||
if(r3.start != 5.toByte() || r3.end != 0.toByte() || r3.size != 6) return "byte downTo fail"
|
||||
|
||||
val r4 = 5.toByte() downTo 6.toByte()
|
||||
if(r4.start != 0.toByte() || r4.end != 0.toByte() || !r3.isReversed || r4.size != 0) return "byte negative downTo fail"
|
||||
if(r4.start != 0.toByte() || r4.end != 0.toByte() || r4.size != 0) return "byte negative downTo fail"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -33,16 +33,16 @@ fun testByte () : String {
|
||||
fun testShort () : String {
|
||||
|
||||
val r1 = 1.toShort() rangeTo 4.toShort()
|
||||
if(r1.end != 4.toShort() || r1.isReversed || r1.size != 4) return "short rangeTo fail"
|
||||
if(r1.end != 4.toShort() || r1.size != 4) return "short rangeTo fail"
|
||||
|
||||
val r2 = 4.toShort() rangeTo 1.toShort()
|
||||
if(r2.start != 0.toShort() || r2.size != 0) return "short negative rangeTo fail"
|
||||
|
||||
val r3 = 5.toShort() downTo 0.toShort()
|
||||
if(r3.start != 5.toShort() || r3.end != 0.toShort() || !r3.isReversed || r3.size != 6) return "short downTo fail"
|
||||
if(r3.start != 5.toShort() || r3.end != 0.toShort() || r3.size != 6) return "short downTo fail"
|
||||
|
||||
val r4 = 5.toShort() downTo 6.toShort()
|
||||
if(r4.start != 0.toShort() || r4.end != 0.toShort() || !r3.isReversed || r4.size != 0) return "short negative downTo fail"
|
||||
if(r4.start != 0.toShort() || r4.end != 0.toShort() || r4.size != 0) return "short negative downTo fail"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -50,16 +50,16 @@ fun testShort () : String {
|
||||
fun testLong () : String {
|
||||
|
||||
val r1 = 1.toLong() rangeTo 4.toLong()
|
||||
if(r1.end != 4.toLong() || r1.isReversed || r1.size != 4.toLong()) return "long rangeTo fail"
|
||||
if(r1.end != 4.toLong() || r1.size != 4.toLong()) return "long rangeTo fail"
|
||||
|
||||
val r2 = 4.toLong() rangeTo 1.toLong()
|
||||
if(r2.start != 0.toLong() || r2.size != 0.toLong()) return "short negative long fail"
|
||||
|
||||
val r3 = 5.toLong() downTo 0.toLong()
|
||||
if(r3.start != 5.toLong() || r3.end != 0.toLong() || !r3.isReversed || r3.size != 6.toLong()) return "long downTo fail"
|
||||
if(r3.start != 5.toLong() || r3.end != 0.toLong() || r3.size != 6.toLong()) return "long downTo fail"
|
||||
|
||||
val r4 = 5.toLong() downTo 6.toLong()
|
||||
if(r4.start != 0.toLong() || r4.end != 0.toLong() || !r3.isReversed || r4.size != 0.toLong()) return "long negative downTo fail"
|
||||
if(r4.start != 0.toLong() || r4.end != 0.toLong() || r4.size != 0.toLong()) return "long negative downTo fail"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -67,16 +67,16 @@ fun testLong () : String {
|
||||
fun testChar () : String {
|
||||
|
||||
val r1 = 'a' rangeTo 'd'
|
||||
if(r1.end != 'd' || r1.isReversed || r1.size != 4) return "char rangeTo fail"
|
||||
if(r1.end != 'd' || r1.size != 4) return "char rangeTo fail"
|
||||
|
||||
val r2 = 'd' rangeTo 'a'
|
||||
if(r2.start != 0.toChar() || r2.size != 0) return "char negative long fail"
|
||||
|
||||
val r3 = 'd' downTo 'a'
|
||||
if(r3.start != 'd' || r3.end != 'a' || !r3.isReversed || r3.size != 4) return "char downTo fail"
|
||||
if(r3.start != 'd' || r3.end != 'a' || r3.size != 4) return "char downTo fail"
|
||||
|
||||
val r4 = 'a' downTo 'd'
|
||||
if(r4.start != 0.toChar() || r4.end != 0.toChar() || !r3.isReversed || r4.size != 0) return "char negative downTo fail"
|
||||
if(r4.start != 0.toChar() || r4.end != 0.toChar() || r4.size != 0) return "char negative downTo fail"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
|
||||
@@ -383,7 +383,6 @@ class CollectionTest {
|
||||
assertEquals(0, indices.start)
|
||||
assertEquals(1, indices.end)
|
||||
assertEquals(2, indices.size)
|
||||
assertFalse(indices.isReversed)
|
||||
|
||||
assertEquals(indices, data.size. indices)
|
||||
}
|
||||
|
||||
@@ -86,10 +86,6 @@ public final class ByteRange implements Range<Byte>, ByteIterable {
|
||||
return new ByteIteratorImpl(start, count, step);
|
||||
}
|
||||
|
||||
public boolean getIsReversed() {
|
||||
return count < 0;
|
||||
}
|
||||
|
||||
public byte getStart() {
|
||||
return start;
|
||||
}
|
||||
|
||||
@@ -86,10 +86,6 @@ public final class CharRange implements Range<Character>, CharIterable {
|
||||
return new CharIteratorImpl(start, count, step);
|
||||
}
|
||||
|
||||
public boolean getIsReversed() {
|
||||
return count < 0;
|
||||
}
|
||||
|
||||
public char getStart() {
|
||||
return start;
|
||||
}
|
||||
|
||||
@@ -84,10 +84,6 @@ public final class DoubleRange implements Range<Double> {
|
||||
return new DoubleIteratorImpl(start, size, step);
|
||||
}
|
||||
|
||||
public boolean getIsReversed() {
|
||||
return size < 0;
|
||||
}
|
||||
|
||||
public double getStart() {
|
||||
return start;
|
||||
}
|
||||
|
||||
@@ -80,10 +80,6 @@ public final class FloatRange implements Range<Float> {
|
||||
return new FloatIteratorImpl(start, size, step);
|
||||
}
|
||||
|
||||
public boolean getIsReversed() {
|
||||
return size < 0;
|
||||
}
|
||||
|
||||
public float getStart() {
|
||||
return start;
|
||||
}
|
||||
|
||||
@@ -86,10 +86,6 @@ public final class IntRange implements Range<Integer>, IntIterable {
|
||||
return new IntIteratorImpl(start, count, step);
|
||||
}
|
||||
|
||||
public boolean getIsReversed() {
|
||||
return count < 0;
|
||||
}
|
||||
|
||||
public int getStart() {
|
||||
return start;
|
||||
}
|
||||
|
||||
@@ -87,10 +87,6 @@ public final class LongRange implements Range<Long>, LongIterable {
|
||||
return new LongIteratorImpl(start, count, step);
|
||||
}
|
||||
|
||||
public boolean getIsReversed() {
|
||||
return count < 0;
|
||||
}
|
||||
|
||||
public long getStart() {
|
||||
return start;
|
||||
}
|
||||
|
||||
@@ -86,10 +86,6 @@ public final class ShortRange implements Range<Short>, ShortIterable {
|
||||
return new ShortIteratorImpl(start, count, step);
|
||||
}
|
||||
|
||||
public boolean getIsReversed() {
|
||||
return count < 0;
|
||||
}
|
||||
|
||||
public short getStart() {
|
||||
return start;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user