From ce29c5fbb7fffbbe4c33d1899814b772ac3ee549 Mon Sep 17 00:00:00 2001 From: Ilya Matveev Date: Tue, 2 May 2017 16:16:49 +0700 Subject: [PATCH] stdlib: Throw NoSuchElementException in range iterators --- .../main/kotlin/kotlin/ranges/ProgressionIterators.kt | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/runtime/src/main/kotlin/kotlin/ranges/ProgressionIterators.kt b/runtime/src/main/kotlin/kotlin/ranges/ProgressionIterators.kt index 0f21f61b096..b751a7bdedd 100644 --- a/runtime/src/main/kotlin/kotlin/ranges/ProgressionIterators.kt +++ b/runtime/src/main/kotlin/kotlin/ranges/ProgressionIterators.kt @@ -21,15 +21,16 @@ package kotlin.ranges * @property step the number by which the value is incremented on each step. */ internal class CharProgressionIterator(first: Char, last: Char, val step: Int) : CharIterator() { - private var next = first.toInt() private val finalElement = last.toInt() private var hasNext: Boolean = if (step > 0) first <= last else first >= last + private var next = if (hasNext) first.toInt() else finalElement override fun hasNext(): Boolean = hasNext override fun nextChar(): Char { val value = next if (value == finalElement) { + if (!hasNext) throw kotlin.NoSuchElementException() hasNext = false } else { @@ -44,15 +45,16 @@ internal class CharProgressionIterator(first: Char, last: Char, val step: Int) : * @property step the number by which the value is incremented on each step. */ internal class IntProgressionIterator(first: Int, last: Int, val step: Int) : IntIterator() { - private var next = first private val finalElement = last private var hasNext: Boolean = if (step > 0) first <= last else first >= last + private var next = if (hasNext) first else finalElement override fun hasNext(): Boolean = hasNext override fun nextInt(): Int { val value = next if (value == finalElement) { + if (!hasNext) throw kotlin.NoSuchElementException() hasNext = false } else { @@ -67,15 +69,16 @@ internal class IntProgressionIterator(first: Int, last: Int, val step: Int) : In * @property step the number by which the value is incremented on each step. */ internal class LongProgressionIterator(first: Long, last: Long, val step: Long) : LongIterator() { - private var next = first private val finalElement = last private var hasNext: Boolean = if (step > 0) first <= last else first >= last + private var next = if (hasNext) first else finalElement override fun hasNext(): Boolean = hasNext override fun nextLong(): Long { val value = next if (value == finalElement) { + if (!hasNext) throw kotlin.NoSuchElementException() hasNext = false } else {