From 0ff3589bb99e3a43c708dca231135bdf61eb9b41 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Wed, 23 Jan 2013 20:05:35 +0400 Subject: [PATCH] Moved *Range.step() functions to stdlib. --- compiler/frontend/src/jet/Ranges.jet | 14 ---- .../primitiveTypes => regressions}/kt765.kt | 0 .../primitiveTypes => regressions}/kt925.kt | 0 .../org/jetbrains/jet/codegen/StdlibTest.java | 8 ++ .../BlackBoxCodegenTestGenerated.java | 10 --- libraries/stdlib/src/kotlin/Ranges.kt | 78 ++++++++++++++++++- runtime/src/jet/ByteRange.java | 7 -- runtime/src/jet/CharRange.java | 7 -- runtime/src/jet/DoubleRange.java | 7 -- runtime/src/jet/FloatRange.java | 7 -- runtime/src/jet/IntRange.java | 7 -- runtime/src/jet/LongRange.java | 7 -- runtime/src/jet/ShortRange.java | 7 -- 13 files changed, 85 insertions(+), 74 deletions(-) rename compiler/testData/codegen/{box/primitiveTypes => regressions}/kt765.kt (100%) rename compiler/testData/codegen/{box/primitiveTypes => regressions}/kt925.kt (100%) diff --git a/compiler/frontend/src/jet/Ranges.jet b/compiler/frontend/src/jet/Ranges.jet index e7b2dc614c8..93eb8b56f38 100644 --- a/compiler/frontend/src/jet/Ranges.jet +++ b/compiler/frontend/src/jet/Ranges.jet @@ -11,8 +11,6 @@ public class IntRange(public val start : Int, public val size : Int) : Range 0, step) + return IntSequence(start, end, if (increment > 0) step else -step) +} + +public fun CharacterSequence.step(step: Int): CharacterSequence { + checkStepIsPositive(step > 0, step) + return CharacterSequence(start, end, if (increment > 0) step else -step) +} + +public fun ByteSequence.step(step: Int): ByteSequence { + checkStepIsPositive(step > 0, step) + return ByteSequence(start, end, if (increment > 0) step else -step) +} + +public fun ShortSequence.step(step: Int): ShortSequence { + checkStepIsPositive(step > 0, step) + return ShortSequence(start, end, if (increment > 0) step else -step) +} + +public fun LongSequence.step(step: Long): LongSequence { + checkStepIsPositive(step > 0, step) + return LongSequence(start, end, if (increment > 0) step else -step) +} + +public fun FloatSequence.step(step: Float): FloatSequence { + checkStepIsPositive(step > 0, step) + return FloatSequence(start, end, if (increment > 0) step else -step) +} + +public fun DoubleSequence.step(step: Double): DoubleSequence { + checkStepIsPositive(step > 0, step) + return DoubleSequence(start, end, if (increment > 0) step else -step) +} + + +public fun IntRange.step(step: Int): IntSequence { + checkStepIsPositive(step > 0, step) + return IntSequence(start, end, step) +} + +public fun CharRange.step(step: Int): CharacterSequence { + checkStepIsPositive(step > 0, step) + return CharacterSequence(start, end, step) +} + +public fun ByteRange.step(step: Int): ByteSequence { + checkStepIsPositive(step > 0, step) + return ByteSequence(start, end, step) +} + +public fun ShortRange.step(step: Int): ShortSequence { + checkStepIsPositive(step > 0, step) + return ShortSequence(start, end, step) +} + +public fun LongRange.step(step: Long): LongSequence { + checkStepIsPositive(step > 0, step) + return LongSequence(start, end, step) +} + +public fun FloatRange.step(step: Float): FloatSequence { + checkStepIsPositive(step > 0, step) + return FloatSequence(start, end, step) +} + +public fun DoubleRange.step(step: Double): DoubleSequence { + checkStepIsPositive(step > 0, step) + return DoubleSequence(start, end, step) +} + + +private fun checkStepIsPositive(isPositive: Boolean, step: Number) { + if (!isPositive) throw IllegalArgumentException("Step must be positive, was: $step") +} diff --git a/runtime/src/jet/ByteRange.java b/runtime/src/jet/ByteRange.java index 0fd53125f71..a1c7903de23 100644 --- a/runtime/src/jet/ByteRange.java +++ b/runtime/src/jet/ByteRange.java @@ -79,13 +79,6 @@ public final class ByteRange implements Range, ByteIterable { return result; } - public ByteIterator step(int step) { - if (step < 0) - return new ByteSequenceIterator(getEnd(), getStart(), step); - else - return new ByteSequenceIterator(getStart(), getEnd(), step); - } - public byte getStart() { return start; } diff --git a/runtime/src/jet/CharRange.java b/runtime/src/jet/CharRange.java index bd4935161dd..2f197d7a65a 100644 --- a/runtime/src/jet/CharRange.java +++ b/runtime/src/jet/CharRange.java @@ -79,13 +79,6 @@ public final class CharRange implements Range, CharIterable { return result; } - public CharIterator step(int step) { - if (step < 0) - return new CharacterSequenceIterator(getEnd(), getStart(), step); - else - return new CharacterSequenceIterator(getStart(), getEnd(), step); - } - public char getStart() { return start; } diff --git a/runtime/src/jet/DoubleRange.java b/runtime/src/jet/DoubleRange.java index 2f544f3bf30..e0940e8e09e 100644 --- a/runtime/src/jet/DoubleRange.java +++ b/runtime/src/jet/DoubleRange.java @@ -77,13 +77,6 @@ public final class DoubleRange implements Range { return result; } - public DoubleIterator step(double step) { - if (step < 0) - return new DoubleSequenceIterator(getEnd(), getStart(), step); - else - return new DoubleSequenceIterator(getStart(), getEnd(), step); - } - public double getStart() { return start; } diff --git a/runtime/src/jet/FloatRange.java b/runtime/src/jet/FloatRange.java index 506d51ab17a..02cbf9ba795 100644 --- a/runtime/src/jet/FloatRange.java +++ b/runtime/src/jet/FloatRange.java @@ -73,13 +73,6 @@ public final class FloatRange implements Range { return result; } - public FloatIterator step(float step) { - if (step < 0) - return new FloatSequenceIterator(getEnd(), getStart(), step); - else - return new FloatSequenceIterator(getStart(), getEnd(), step); - } - public float getStart() { return start; } diff --git a/runtime/src/jet/IntRange.java b/runtime/src/jet/IntRange.java index 0a18e42ecab..b2626271679 100644 --- a/runtime/src/jet/IntRange.java +++ b/runtime/src/jet/IntRange.java @@ -79,13 +79,6 @@ public final class IntRange implements Range, IntIterable { return result; } - public IntIterator step(int step) { - if (step < 0) - return new IntSequenceIterator(getEnd(), getStart(), step); - else - return new IntSequenceIterator(getStart(), getEnd(), step); - } - public int getStart() { return start; } diff --git a/runtime/src/jet/LongRange.java b/runtime/src/jet/LongRange.java index ac0ef9462be..5d0791a6bbc 100644 --- a/runtime/src/jet/LongRange.java +++ b/runtime/src/jet/LongRange.java @@ -80,13 +80,6 @@ public final class LongRange implements Range, LongIterable { return result; } - public LongIterator step(long step) { - if (step < 0) - return new LongSequenceIterator(getEnd(), getStart(), step); - else - return new LongSequenceIterator(getStart(), getEnd(), step); - } - public long getStart() { return start; } diff --git a/runtime/src/jet/ShortRange.java b/runtime/src/jet/ShortRange.java index 6767df8297b..ffbda01aecd 100644 --- a/runtime/src/jet/ShortRange.java +++ b/runtime/src/jet/ShortRange.java @@ -79,13 +79,6 @@ public final class ShortRange implements Range, ShortIterable { return result; } - public ShortIterator step(int step) { - if (step < 0) - return new ShortSequenceIterator(getEnd(), getStart(), step); - else - return new ShortSequenceIterator(getStart(), getEnd(), step); - } - public short getStart() { return start; }