diff --git a/compiler/frontend/src/jet/Library.jet b/compiler/frontend/src/jet/Library.jet index 520ab070b0c..cdbbde0740f 100644 --- a/compiler/frontend/src/jet/Library.jet +++ b/compiler/frontend/src/jet/Library.jet @@ -256,7 +256,7 @@ trait Range> { fun contains(item : T) : Boolean } -class IntRange(val start : Int, val size : Int, val isReversed : Boolean = false) : Range, IntIterable { +class IntRange(val start : Int, val size : Int) : Range, IntIterable { fun iterator () : IntIterator fun contains (elem: Int) : Boolean @@ -266,9 +266,11 @@ class IntRange(val start : Int, val size : Int, val isReversed : Boolean = false fun minus() : IntRange fun step(step: Int) : IntIterator + + val isReversed : Boolean } -class LongRange(val start : Long, val size : Long, val isReversed : Boolean = false) : Range, LongIterable { +class LongRange(val start : Long, val size : Long) : Range, LongIterable { fun iterator () : LongIterator fun contains (elem: Long) : Boolean @@ -278,9 +280,11 @@ class LongRange(val start : Long, val size : Long, val isReversed : Boolean = fa fun minus() : LongRange fun step(step: Long) : LongIterator + + val isReversed : Boolean } -class ByteRange(val start : Byte, val size : Int, val isReversed : Boolean = false) : Range, ByteIterable { +class ByteRange(val start : Byte, val size : Int) : Range, ByteIterable { fun iterator () : ByteIterator fun contains (elem: Byte) : Boolean @@ -290,9 +294,11 @@ class ByteRange(val start : Byte, val size : Int, val isReversed : Boolean = fal fun minus() : ByteRange fun step(step: Int) : ByteIterator + + val isReversed : Boolean } -class ShortRange(val start : Short, val size : Int, val isReversed : Boolean = false) : Range, ShortIterable { +class ShortRange(val start : Short, val size : Int) : Range, ShortIterable { fun iterator () : ShortIterator fun contains (elem: Byte) : Boolean @@ -302,9 +308,11 @@ class ShortRange(val start : Short, val size : Int, val isReversed : Boolean = f fun minus() : ShortRange fun step(step: Int) : ShortIterator + + val isReversed : Boolean } -class CharRange(val start : Char, val size : Int, val isReversed : Boolean = false) : Range, CharIterable { +class CharRange(val start : Char, val size : Int) : Range, CharIterable { fun iterator () : CharIterator fun contains (elem: Char) : Boolean @@ -314,6 +322,8 @@ class CharRange(val start : Char, val size : Int, val isReversed : Boolean = fal fun minus() : CharRange fun step(step: Int) : CharIterator + + val isReversed : Boolean } abstract class Number : Hashable { diff --git a/compiler/testData/codegen/regressions/kt821.kt b/compiler/testData/codegen/regressions/kt821.kt index c9eea791ac6..47b7d3f465f 100644 --- a/compiler/testData/codegen/regressions/kt821.kt +++ b/compiler/testData/codegen/regressions/kt821.kt @@ -2,9 +2,6 @@ fun box() : String { val r1 = IntRange(1, 4) if(r1.end != 4 || r1.isReversed || r1.size != 4) return "fail" - val r2 = IntRange(1, 4, true) - if(r2.end != -2 || !r2.isReversed || r2.size != 4) return "fail" - val r3 = -(0..5) if(r3.start != 5 || r3.end != 0 || !r3.isReversed || r3.size != 6) return "fail" @@ -14,9 +11,6 @@ fun box() : String { val r5 = ByteRange(1, 4) if(r5.end != 4.byt || r5.isReversed || r5.size != 4) return "fail" - val r6 = ByteRange(1, 4, true) - if(r6.end != -2.byt || !r6.isReversed) return "fail" - val r7 = -(0.byt..5.byt) if(r7.start != 5.byt || r7.end != 0.byt || !r7.isReversed) return "fail" @@ -26,9 +20,6 @@ fun box() : String { val r10 = ShortRange(1, 4) if(r10.end != 4.sht || r10.isReversed || r10.size != 4) return "fail" - val r11 = ShortRange(1, 4, true) - if(r11.end != -2.sht || !r11.isReversed) return "fail" - val r12 = -(0.sht..5.sht) if(r12.start != 5.sht || r12.end != 0.sht || !r12.isReversed) return "fail" @@ -38,9 +29,6 @@ fun box() : String { val r14 = CharRange('a', 4) if(r14.end != 'd' || r14.isReversed || r14.size != 4) return "fail" - val r15 = CharRange('D', 4, true) - if(r15.end != 'A' || !r15.isReversed) return "fail" - val r16 = -('a'..'e') if(r16.start != 'e' || r16.end != 'a' || !r16.isReversed) return "fail" diff --git a/stdlib/src/jet/ByteRange.java b/stdlib/src/jet/ByteRange.java index 8a1d94ca3cd..b61679c79e7 100644 --- a/stdlib/src/jet/ByteRange.java +++ b/stdlib/src/jet/ByteRange.java @@ -11,14 +11,6 @@ public final class ByteRange implements Range, ByteIterable, JetObject { this.count = count; } - public ByteRange(byte startValue, int count, boolean reversed) { - this(startValue, reversed ? -count : count); - } - - public ByteRange(byte startValue, int count, boolean reversed, int defaultMask) { - this(startValue, reversed ? -count : count, (defaultMask & 4) == 0); - } - @Override public boolean contains(Byte item) { if (item == null) return false; @@ -71,15 +63,6 @@ public final class ByteRange implements Range, ByteIterable, JetObject { return new ByteRange((byte) 0, length); } - public static ByteRange rangeTo(byte from, byte to) { - if(from > to) { - return new ByteRange(to, from-to+1, true); - } - else { - return new ByteRange(from, to-from+1); - } - } - private static class MyIterator extends ByteIterator { private final static TypeInfo typeInfo = TypeInfo.getTypeInfo(MyIterator.class, false); diff --git a/stdlib/src/jet/CharRange.java b/stdlib/src/jet/CharRange.java index 357fa08dd14..ff94c99239c 100644 --- a/stdlib/src/jet/CharRange.java +++ b/stdlib/src/jet/CharRange.java @@ -11,14 +11,6 @@ public final class CharRange implements Range, CharIterable, JetObjec this.count = count; } - public CharRange(char startValue, int count, boolean reversed) { - this(startValue, reversed ? -count : count); - } - - public CharRange(char startValue, int count, boolean reversed, int defaultMask) { - this(startValue, reversed ? -count : count, (defaultMask & 4) == 0); - } - @Override public boolean contains(Character item) { if (item == null) return false; @@ -71,15 +63,6 @@ public final class CharRange implements Range, CharIterable, JetObjec return new CharRange((char) 0, length); } - public static CharRange rangeTo(char from, char to) { - if(from > to) { - return new CharRange(to, from-to+1, true); - } - else { - return new CharRange(from, to-from+1); - } - } - private static class MyIterator extends CharIterator { private final static TypeInfo typeInfo = TypeInfo.getTypeInfo(MyIterator.class, false); diff --git a/stdlib/src/jet/IntRange.java b/stdlib/src/jet/IntRange.java index 595ab2aef54..9b722639436 100644 --- a/stdlib/src/jet/IntRange.java +++ b/stdlib/src/jet/IntRange.java @@ -11,14 +11,6 @@ public final class IntRange implements Range, IntIterable, JetObject { this.count = count; } - public IntRange(int startValue, int count, boolean reversed) { - this(startValue, reversed ? -count : count); - } - - public IntRange(int startValue, int count, boolean reversed, int defaultMask) { - this(startValue, reversed ? -count : count, (defaultMask & 4) == 0); - } - @Override public boolean contains(Integer item) { if (item == null) return false; @@ -71,15 +63,6 @@ public final class IntRange implements Range, IntIterable, JetObject { return new IntRange(0, length); } - public static IntRange rangeTo(int from, int to) { - if(from > to) { - return new IntRange(to, from-to+1, true); - } - else { - return new IntRange(from, to-from+1); - } - } - private static class MyIterator extends IntIterator { private final static TypeInfo typeInfo = TypeInfo.getTypeInfo(MyIterator.class, false); @@ -92,8 +75,15 @@ public final class IntRange implements Range, IntIterable, JetObject { public MyIterator(int startValue, int count, int step) { cur = startValue; this.step = step; - reversed = count < 0; - this.count = reversed ? -count : count; + if(count < 0) { + reversed = count < 0; + count = -count; + startValue += count; + } + else { + reversed = false; + } + this.count = count; } @Override diff --git a/stdlib/src/jet/LongRange.java b/stdlib/src/jet/LongRange.java index 0d8224105d7..abcb921ca87 100644 --- a/stdlib/src/jet/LongRange.java +++ b/stdlib/src/jet/LongRange.java @@ -11,14 +11,6 @@ public final class LongRange implements Range, LongIterable, JetObject { this.count = count; } - public LongRange(long startValue, long count, boolean reversed) { - this(startValue, reversed ? -count : count); - } - - public LongRange(int startValue, int count, boolean reversed, int defaultMask) { - this(startValue, reversed ? -count : count, (defaultMask & 4) == 0); - } - public LongIterator step(long step) { return new MyIterator(start, count, step); } diff --git a/stdlib/src/jet/ShortRange.java b/stdlib/src/jet/ShortRange.java index a12e7ba032e..79428f90702 100644 --- a/stdlib/src/jet/ShortRange.java +++ b/stdlib/src/jet/ShortRange.java @@ -11,14 +11,6 @@ public final class ShortRange implements Range, ShortIterable, JetObject this.count = count; } - public ShortRange(short startValue, int count, boolean reversed) { - this(startValue, reversed ? -count : count); - } - - public ShortRange(short startValue, int count, boolean reversed, int defaultMask) { - this(startValue, reversed ? -count : count, (defaultMask & 4) == 0); - } - public ShortIterator step(int step) { return new MyIterator(start, count, step); } @@ -71,15 +63,6 @@ public final class ShortRange implements Range, ShortIterable, JetObject return new ShortRange((byte) 0, length); } - public static ShortRange rangeTo(short from, short to) { - if(from > to) { - return new ShortRange(to, from-to+1, true); - } - else { - return new ShortRange(from, to-from+1); - } - } - private static class MyIterator extends ShortIterator { private final static TypeInfo typeInfo = TypeInfo.getTypeInfo(MyIterator.class, false); diff --git a/stdlib/src/jet/runtime/Ranges.java b/stdlib/src/jet/runtime/Ranges.java index 8258615078b..19d20293a12 100644 --- a/stdlib/src/jet/runtime/Ranges.java +++ b/stdlib/src/jet/runtime/Ranges.java @@ -14,7 +14,7 @@ public class Ranges { public static ByteRange rangeTo(byte from, byte to) { if(from > to) { - return new ByteRange(to, from-to+1, true); + return new ByteRange(from, to-from-1); } else { return new ByteRange(from, to-from+1); @@ -23,7 +23,7 @@ public class Ranges { public static ShortRange rangeTo(byte from, short to) { if(from > to) { - return new ShortRange(to, from-to+1, true); + return new ShortRange(from, to-from-1); } else { return new ShortRange(from, to-from+1); @@ -32,7 +32,7 @@ public class Ranges { public static IntRange rangeTo(byte from, int to) { if(from > to) { - return new IntRange(to, from-to+1, true); + return new IntRange(from, to-from-1); } else { return new IntRange(from, to-from+1); @@ -41,7 +41,7 @@ public class Ranges { public static LongRange rangeTo(byte from, long to) { if(from > to) { - return new LongRange(to, from-to+1, true); + return new LongRange(from, to-from-1); } else { return new LongRange(from, to-from+1); @@ -50,7 +50,7 @@ public class Ranges { public static CharRange rangeTo(byte from, char to) { if(from > to) { - return new CharRange(to, from-to+1, true); + return new CharRange((char) from, to-from-1); } else { return new CharRange((char) from, to-from+1); @@ -59,7 +59,7 @@ public class Ranges { public static ShortRange rangeTo(short from, byte to) { if(from > to) { - return new ShortRange(to, from-to+1, true); + return new ShortRange(from, to-from-1); } else { return new ShortRange(from, to-from+1); @@ -68,7 +68,7 @@ public class Ranges { public static ShortRange rangeTo(short from, short to) { if(from > to) { - return new ShortRange(to, from-to+1, true); + return new ShortRange(from, to-from-1); } else { return new ShortRange(from, to-from+1); @@ -77,7 +77,7 @@ public class Ranges { public static IntRange rangeTo(short from, int to) { if(from > to) { - return new IntRange(to, from-to+1, true); + return new IntRange(from, to-from-1); } else { return new IntRange(from, to-from+1); @@ -86,7 +86,7 @@ public class Ranges { public static LongRange rangeTo(short from, long to) { if(from > to) { - return new LongRange(to, from-to+1, true); + return new LongRange(from, to-from-1); } else { return new LongRange(from, to-from+1); @@ -95,7 +95,7 @@ public class Ranges { public static ShortRange rangeTo(short from, char to) { if(from > to) { - return new ShortRange((short) to, from-to+1, true); + return new ShortRange(from, to-from-1); } else { return new ShortRange(from, to-from+1); @@ -104,7 +104,7 @@ public class Ranges { public static IntRange rangeTo(int from, byte to) { if(from > to) { - return new IntRange(to, from-to+1, true); + return new IntRange(from, to-from-1); } else { return new IntRange(from, to-from+1); @@ -113,7 +113,7 @@ public class Ranges { public static IntRange rangeTo(int from, short to) { if(from > to) { - return new IntRange(to, from-to+1, true); + return new IntRange(from, to-from-1); } else { return new IntRange(from, to-from+1); @@ -122,7 +122,7 @@ public class Ranges { public static IntRange rangeTo(int from, int to) { if(from > to) { - return new IntRange(to, from-to+1, true); + return new IntRange(from, to-from-1); } else { return new IntRange(from, to-from+1); @@ -131,7 +131,7 @@ public class Ranges { public static LongRange rangeTo(int from, long to) { if(from > to) { - return new LongRange(to, from-to+1, true); + return new LongRange(from, to-from-1); } else { return new LongRange(from, to-from+1); @@ -140,7 +140,7 @@ public class Ranges { public static IntRange rangeTo(int from, char to) { if(from > to) { - return new IntRange(to, from-to+1, true); + return new IntRange(from, to-from-1); } else { return new IntRange(from, to-from+1); @@ -149,7 +149,7 @@ public class Ranges { public static LongRange rangeTo(long from, byte to) { if(from > to) { - return new LongRange(to, from-to+1, true); + return new LongRange(from, to-from-1); } else { return new LongRange(from, to-from+1); @@ -158,7 +158,7 @@ public class Ranges { public static LongRange rangeTo(long from, short to) { if(from > to) { - return new LongRange(to, from-to+1, true); + return new LongRange(from, to-from-1); } else { return new LongRange(from, to-from+1); @@ -167,7 +167,7 @@ public class Ranges { public static LongRange rangeTo(long from, int to) { if(from > to) { - return new LongRange(to, from-to+1, true); + return new LongRange(from, to-from-1); } else { return new LongRange(from, to-from+1); @@ -176,7 +176,7 @@ public class Ranges { public static LongRange rangeTo(long from, long to) { if(from > to) { - return new LongRange(to, from-to+1, true); + return new LongRange(from, to-from-1); } else { return new LongRange(from, to-from+1); @@ -185,7 +185,7 @@ public class Ranges { public static LongRange rangeTo(long from, char to) { if(from > to) { - return new LongRange(to, from-to+1, true); + return new LongRange(from, to-from-1); } else { return new LongRange(from, to-from+1); @@ -194,7 +194,7 @@ public class Ranges { public static CharRange rangeTo(char from, byte to) { if(from > to) { - return new CharRange((char) to, from-to+1, true); + return new CharRange(from, to-from-1); } else { return new CharRange(from, to-from+1); @@ -203,7 +203,7 @@ public class Ranges { public static ShortRange rangeTo(char from, short to) { if(from > to) { - return new ShortRange(to, from-to+1, true); + return new ShortRange((short) from, to-from-1); } else { return new ShortRange((short) from, to-from+1); @@ -212,7 +212,7 @@ public class Ranges { public static IntRange rangeTo(char from, int to) { if(from > to) { - return new IntRange(to, from-to+1, true); + return new IntRange(from, to-from-1); } else { return new IntRange(from, to-from+1); @@ -221,7 +221,7 @@ public class Ranges { public static LongRange rangeTo(char from, long to) { if(from > to) { - return new LongRange(to, from-to+1, true); + return new LongRange(from, to-from-1); } else { return new LongRange(from, to-from+1); @@ -230,7 +230,7 @@ public class Ranges { public static CharRange rangeTo(char from, char to) { if(from > to) { - return new CharRange(to, from-to+1, true); + return new CharRange(from, to-from-1); } else { return new CharRange(from, to-from+1); @@ -266,7 +266,7 @@ public class Ranges { System.out.println("\npublic static " + resType + " rangeTo(" + t1 + " from, " + t2 + " to) {" + "\n if(from > to) {\n" + - " return new " + resType + "(to, from-to+1, true);\n" + + " return new " + resType + "(from, to-from-1);\n" + " }\n" + " else {\n" + " return new " + resType + "(from, to-from+1);\n" +