Dropped *Range.isReversed

This commit is contained in:
Evgeny Gerashchenko
2013-01-22 22:22:50 +04:00
parent 797b961484
commit c8a194c0a8
13 changed files with 31 additions and 100 deletions
@@ -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
}
}
-14
View File
@@ -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
}
-7
View File
@@ -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"
}
+15 -15
View File
@@ -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"
}
-1
View File
@@ -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)
}
-4
View File
@@ -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;
}
-4
View File
@@ -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;
}
-4
View File
@@ -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;
}
-4
View File
@@ -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;
}
-4
View File
@@ -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;
}
-4
View File
@@ -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;
}
-4
View File
@@ -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;
}