From c8a194c0a85c54bda14160f080d0de31d028cfe7 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Tue, 22 Jan 2013 22:22:50 +0400 Subject: [PATCH] Dropped *Range.isReversed --- .../jet/codegen/ExpressionCodegen.java | 37 +++++-------------- compiler/frontend/src/jet/Ranges.jet | 14 ------- compiler/testData/builtin-classes.txt | 7 ---- .../codegen/box/primitiveTypes/kt821.kt | 14 +++---- .../testData/codegen/regressions/kt930.kt | 30 +++++++-------- libraries/stdlib/test/CollectionTest.kt | 1 - runtime/src/jet/ByteRange.java | 4 -- runtime/src/jet/CharRange.java | 4 -- runtime/src/jet/DoubleRange.java | 4 -- runtime/src/jet/FloatRange.java | 4 -- runtime/src/jet/IntRange.java | 4 -- runtime/src/jet/LongRange.java | 4 -- runtime/src/jet/ShortRange.java | 4 -- 13 files changed, 31 insertions(+), 100 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index a40175f9151..f80918ca390 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -828,8 +828,7 @@ public class ExpressionCodegen extends JetVisitor 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 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 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 } } diff --git a/compiler/frontend/src/jet/Ranges.jet b/compiler/frontend/src/jet/Ranges.jet index b2e7207f701..f46f320b0fc 100644 --- a/compiler/frontend/src/jet/Ranges.jet +++ b/compiler/frontend/src/jet/Ranges.jet @@ -13,8 +13,6 @@ public class IntRange(public val start : Int, public val size : Int) : Range { public final class ByteRange : jet.Range, 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 { public final class CharRange : jet.Range, 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 { public final class DoubleRange : jet.Range { 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 { public final class FloatRange : jet.Range { 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 { public final class IntRange : jet.Range, 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 { public final class LongRange : jet.Range, 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 { public final class ShortRange : jet.Range, 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 diff --git a/compiler/testData/codegen/box/primitiveTypes/kt821.kt b/compiler/testData/codegen/box/primitiveTypes/kt821.kt index 5edc90cd96f..002046d31cb 100644 --- a/compiler/testData/codegen/box/primitiveTypes/kt821.kt +++ b/compiler/testData/codegen/box/primitiveTypes/kt821.kt @@ -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" } diff --git a/compiler/testData/codegen/regressions/kt930.kt b/compiler/testData/codegen/regressions/kt930.kt index 45dc1afb7c6..d4db1303097 100644 --- a/compiler/testData/codegen/regressions/kt930.kt +++ b/compiler/testData/codegen/regressions/kt930.kt @@ -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" } diff --git a/libraries/stdlib/test/CollectionTest.kt b/libraries/stdlib/test/CollectionTest.kt index a5c98d1255d..3293ae345e5 100644 --- a/libraries/stdlib/test/CollectionTest.kt +++ b/libraries/stdlib/test/CollectionTest.kt @@ -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) } diff --git a/runtime/src/jet/ByteRange.java b/runtime/src/jet/ByteRange.java index 84f6e7140af..6d260a78484 100644 --- a/runtime/src/jet/ByteRange.java +++ b/runtime/src/jet/ByteRange.java @@ -86,10 +86,6 @@ public final class ByteRange implements Range, ByteIterable { return new ByteIteratorImpl(start, count, step); } - public boolean getIsReversed() { - return count < 0; - } - public byte getStart() { return start; } diff --git a/runtime/src/jet/CharRange.java b/runtime/src/jet/CharRange.java index cc0f9e5e6a2..5f375bb52e0 100644 --- a/runtime/src/jet/CharRange.java +++ b/runtime/src/jet/CharRange.java @@ -86,10 +86,6 @@ public final class CharRange implements Range, CharIterable { return new CharIteratorImpl(start, count, step); } - public boolean getIsReversed() { - return count < 0; - } - public char getStart() { return start; } diff --git a/runtime/src/jet/DoubleRange.java b/runtime/src/jet/DoubleRange.java index 6f6aff74bb4..d56b774ce89 100644 --- a/runtime/src/jet/DoubleRange.java +++ b/runtime/src/jet/DoubleRange.java @@ -84,10 +84,6 @@ public final class DoubleRange implements Range { return new DoubleIteratorImpl(start, size, step); } - public boolean getIsReversed() { - return size < 0; - } - public double getStart() { return start; } diff --git a/runtime/src/jet/FloatRange.java b/runtime/src/jet/FloatRange.java index b56b2b09af1..03603d87471 100644 --- a/runtime/src/jet/FloatRange.java +++ b/runtime/src/jet/FloatRange.java @@ -80,10 +80,6 @@ public final class FloatRange implements Range { return new FloatIteratorImpl(start, size, step); } - public boolean getIsReversed() { - return size < 0; - } - public float getStart() { return start; } diff --git a/runtime/src/jet/IntRange.java b/runtime/src/jet/IntRange.java index 4dd268c04bb..5e187542490 100644 --- a/runtime/src/jet/IntRange.java +++ b/runtime/src/jet/IntRange.java @@ -86,10 +86,6 @@ public final class IntRange implements Range, IntIterable { return new IntIteratorImpl(start, count, step); } - public boolean getIsReversed() { - return count < 0; - } - public int getStart() { return start; } diff --git a/runtime/src/jet/LongRange.java b/runtime/src/jet/LongRange.java index 19adfffcb86..368d5a94874 100644 --- a/runtime/src/jet/LongRange.java +++ b/runtime/src/jet/LongRange.java @@ -87,10 +87,6 @@ public final class LongRange implements Range, LongIterable { return new LongIteratorImpl(start, count, step); } - public boolean getIsReversed() { - return count < 0; - } - public long getStart() { return start; } diff --git a/runtime/src/jet/ShortRange.java b/runtime/src/jet/ShortRange.java index c3468928a06..ac5650f854e 100644 --- a/runtime/src/jet/ShortRange.java +++ b/runtime/src/jet/ShortRange.java @@ -86,10 +86,6 @@ public final class ShortRange implements Range, ShortIterable { return new ShortIteratorImpl(start, count, step); } - public boolean getIsReversed() { - return count < 0; - } - public short getStart() { return start; }