Do not call deprecated public getProgressionFinalElement, call internal getProgressionLastElement instead.

ProgressionIterators do not compute final element by themselves, but use one computed by Progression.
Update testdata for LoadBuiltinsTest
This commit is contained in:
Ilya Gorbunov
2015-11-13 06:00:38 +03:00
parent 96f301fdec
commit 3f4430087e
6 changed files with 78 additions and 75 deletions
+11 -11
View File
@@ -150,9 +150,9 @@ public abstract class ByteIterator : kotlin.Iterator<kotlin.Byte> {
}
internal final class ByteProgressionIterator : kotlin.ByteIterator {
/*primary*/ public constructor ByteProgressionIterator(/*0*/ start: kotlin.Byte, /*1*/ end: kotlin.Byte, /*2*/ increment: kotlin.Int)
private final val finalElement: kotlin.Byte
private final fun <get-finalElement>(): kotlin.Byte
/*primary*/ public constructor ByteProgressionIterator(/*0*/ first: kotlin.Byte, /*1*/ last: kotlin.Byte, /*2*/ increment: kotlin.Int)
private final val finalElement: kotlin.Int
private final fun <get-finalElement>(): kotlin.Int
private final var hasNext: kotlin.Boolean
private final fun <get-hasNext>(): kotlin.Boolean
private final fun <set-hasNext>(/*0*/ <set-?>: kotlin.Boolean): kotlin.Unit
@@ -252,9 +252,9 @@ public open class CharProgression : kotlin.Progression<kotlin.Char> {
}
internal final class CharProgressionIterator : kotlin.CharIterator {
/*primary*/ public constructor CharProgressionIterator(/*0*/ start: kotlin.Char, /*1*/ end: kotlin.Char, /*2*/ increment: kotlin.Int)
private final val finalElement: kotlin.Char
private final fun <get-finalElement>(): kotlin.Char
/*primary*/ public constructor CharProgressionIterator(/*0*/ first: kotlin.Char, /*1*/ last: kotlin.Char, /*2*/ increment: kotlin.Int)
private final val finalElement: kotlin.Int
private final fun <get-finalElement>(): kotlin.Int
private final var hasNext: kotlin.Boolean
private final fun <get-hasNext>(): kotlin.Boolean
private final fun <set-hasNext>(/*0*/ <set-?>: kotlin.Boolean): kotlin.Unit
@@ -671,7 +671,7 @@ public open class IntProgression : kotlin.Progression<kotlin.Int> {
}
internal final class IntProgressionIterator : kotlin.IntIterator {
/*primary*/ public constructor IntProgressionIterator(/*0*/ start: kotlin.Int, /*1*/ end: kotlin.Int, /*2*/ increment: kotlin.Int)
/*primary*/ public constructor IntProgressionIterator(/*0*/ first: kotlin.Int, /*1*/ last: kotlin.Int, /*2*/ increment: kotlin.Int)
private final val finalElement: kotlin.Int
private final fun <get-finalElement>(): kotlin.Int
private final var hasNext: kotlin.Boolean
@@ -861,7 +861,7 @@ public open class LongProgression : kotlin.Progression<kotlin.Long> {
}
internal final class LongProgressionIterator : kotlin.LongIterator {
/*primary*/ public constructor LongProgressionIterator(/*0*/ start: kotlin.Long, /*1*/ end: kotlin.Long, /*2*/ increment: kotlin.Long)
/*primary*/ public constructor LongProgressionIterator(/*0*/ first: kotlin.Long, /*1*/ last: kotlin.Long, /*2*/ increment: kotlin.Long)
private final val finalElement: kotlin.Long
private final fun <get-finalElement>(): kotlin.Long
private final var hasNext: kotlin.Boolean
@@ -1186,9 +1186,9 @@ public abstract class ShortIterator : kotlin.Iterator<kotlin.Short> {
}
internal final class ShortProgressionIterator : kotlin.ShortIterator {
/*primary*/ public constructor ShortProgressionIterator(/*0*/ start: kotlin.Short, /*1*/ end: kotlin.Short, /*2*/ increment: kotlin.Int)
private final val finalElement: kotlin.Short
private final fun <get-finalElement>(): kotlin.Short
/*primary*/ public constructor ShortProgressionIterator(/*0*/ first: kotlin.Short, /*1*/ last: kotlin.Short, /*2*/ increment: kotlin.Int)
private final val finalElement: kotlin.Int
private final fun <get-finalElement>(): kotlin.Int
private final var hasNext: kotlin.Boolean
private final fun <get-hasNext>(): kotlin.Boolean
private final fun <set-hasNext>(/*0*/ <set-?>: kotlin.Boolean): kotlin.Unit
@@ -18,22 +18,20 @@
package kotlin
import kotlin.internal.getProgressionFinalElement
/**
* An iterator over a progression of values of type `Byte`.
* @property increment the number by which the value is incremented on each step.
*/
internal class ByteProgressionIterator(start: Byte, end: Byte, val increment: Int) : ByteIterator() {
private var next = start.toInt()
private val finalElement: Byte = getProgressionFinalElement(start.toInt(), end.toInt(), increment).toByte()
private var hasNext: Boolean = if (increment > 0) start <= end else start >= end
internal class ByteProgressionIterator(first: Byte, last: Byte, val increment: Int) : ByteIterator() {
private var next = first.toInt()
private val finalElement = last.toInt()
private var hasNext: Boolean = if (increment > 0) first <= last else first >= last
override fun hasNext(): Boolean = hasNext
override fun nextByte(): Byte {
val value = next
if (value == finalElement.toInt()) {
if (value == finalElement) {
hasNext = false
}
else {
@@ -47,16 +45,16 @@ internal class ByteProgressionIterator(start: Byte, end: Byte, val increment: In
* An iterator over a progression of values of type `Char`.
* @property increment the number by which the value is incremented on each step.
*/
internal class CharProgressionIterator(start: Char, end: Char, val increment: Int) : CharIterator() {
private var next = start.toInt()
private val finalElement: Char = getProgressionFinalElement(start.toInt(), end.toInt(), increment).toChar()
private var hasNext: Boolean = if (increment > 0) start <= end else start >= end
internal class CharProgressionIterator(first: Char, last: Char, val increment: Int) : CharIterator() {
private var next = first.toInt()
private val finalElement = last.toInt()
private var hasNext: Boolean = if (increment > 0) first <= last else first >= last
override fun hasNext(): Boolean = hasNext
override fun nextChar(): Char {
val value = next
if (value == finalElement.toInt()) {
if (value == finalElement) {
hasNext = false
}
else {
@@ -70,16 +68,16 @@ internal class CharProgressionIterator(start: Char, end: Char, val increment: In
* An iterator over a progression of values of type `Short`.
* @property increment the number by which the value is incremented on each step.
*/
internal class ShortProgressionIterator(start: Short, end: Short, val increment: Int) : ShortIterator() {
private var next = start.toInt()
private val finalElement: Short = getProgressionFinalElement(start.toInt(), end.toInt(), increment).toShort()
private var hasNext: Boolean = if (increment > 0) start <= end else start >= end
internal class ShortProgressionIterator(first: Short, last: Short, val increment: Int) : ShortIterator() {
private var next = first.toInt()
private val finalElement = last.toInt()
private var hasNext: Boolean = if (increment > 0) first <= last else first >= last
override fun hasNext(): Boolean = hasNext
override fun nextShort(): Short {
val value = next
if (value == finalElement.toInt()) {
if (value == finalElement) {
hasNext = false
}
else {
@@ -93,10 +91,10 @@ internal class ShortProgressionIterator(start: Short, end: Short, val increment:
* An iterator over a progression of values of type `Int`.
* @property increment the number by which the value is incremented on each step.
*/
internal class IntProgressionIterator(start: Int, end: Int, val increment: Int) : IntIterator() {
private var next = start
private val finalElement: Int = getProgressionFinalElement(start, end, increment)
private var hasNext: Boolean = if (increment > 0) start <= end else start >= end
internal class IntProgressionIterator(first: Int, last: Int, val increment: Int) : IntIterator() {
private var next = first
private val finalElement = last
private var hasNext: Boolean = if (increment > 0) first <= last else first >= last
override fun hasNext(): Boolean = hasNext
@@ -116,10 +114,10 @@ internal class IntProgressionIterator(start: Int, end: Int, val increment: Int)
* An iterator over a progression of values of type `Long`.
* @property increment the number by which the value is incremented on each step.
*/
internal class LongProgressionIterator(start: Long, end: Long, val increment: Long) : LongIterator() {
private var next = start
private val finalElement: Long = getProgressionFinalElement(start, end, increment)
private var hasNext: Boolean = if (increment > 0) start <= end else start >= end
internal class LongProgressionIterator(first: Long, last: Long, val increment: Long) : LongIterator() {
private var next = first
private val finalElement = last
private var hasNext: Boolean = if (increment > 0) first <= last else first >= last
override fun hasNext(): Boolean = hasNext
+7 -5
View File
@@ -18,6 +18,8 @@
package kotlin
import kotlin.internal.getProgressionLastElement
@Deprecated("Use IntProgression instead.", ReplaceWith("IntProgression"), level = DeprecationLevel.WARNING)
/**
* A progression of values of type `Byte`.
@@ -41,7 +43,7 @@ public open class ByteProgression
/**
* The last element in the progression.
*/
public val last: Byte = kotlin.internal.getProgressionFinalElement(start.toInt(), endInclusive.toInt(), increment).toByte()
public val last: Byte = getProgressionLastElement(start.toInt(), endInclusive.toInt(), increment).toByte()
@Deprecated("Use first instead.", ReplaceWith("first"))
public override val start: Byte get() = first
@@ -99,7 +101,7 @@ public open class CharProgression
/**
* The last element in the progression.
*/
public val last: Char = kotlin.internal.getProgressionFinalElement(start.toInt(), endInclusive.toInt(), increment).toChar()
public val last: Char = getProgressionLastElement(start.toInt(), endInclusive.toInt(), increment).toChar()
@Deprecated("Use first instead.", ReplaceWith("first"))
public override val start: Char get() = first
@@ -158,7 +160,7 @@ public open class ShortProgression
/**
* The last element in the progression.
*/
public val last: Short = kotlin.internal.getProgressionFinalElement(start.toInt(), endInclusive.toInt(), increment).toShort()
public val last: Short = getProgressionLastElement(start.toInt(), endInclusive.toInt(), increment).toShort()
@Deprecated("Use first instead.", ReplaceWith("first"))
public override val start: Short get() = first
@@ -216,7 +218,7 @@ public open class IntProgression
/**
* The last element in the progression.
*/
public val last: Int = kotlin.internal.getProgressionFinalElement(start.toInt(), endInclusive.toInt(), increment).toInt()
public val last: Int = getProgressionLastElement(start.toInt(), endInclusive.toInt(), increment).toInt()
@Deprecated("Use first instead.", ReplaceWith("first"))
public override val start: Int get() = first
@@ -274,7 +276,7 @@ public open class LongProgression
/**
* The last element in the progression.
*/
public val last: Long = kotlin.internal.getProgressionFinalElement(start.toLong(), endInclusive.toLong(), increment).toLong()
public val last: Long = getProgressionLastElement(start.toLong(), endInclusive.toLong(), increment).toLong()
@Deprecated("Use first instead.", ReplaceWith("first"))
public override val start: Long get() = first
@@ -37,31 +37,8 @@ private fun differenceModulo(a: Long, b: Long, c: Long): Long {
}
/**
* Calculates the final element of a bounded arithmetic progression, i.e. the last element of the progression which is in the range
* from [start] to [end] in case of a positive [increment], or from [end] to [start] in case of a negative
* increment.
*
* No validation on passed parameters is performed. The given parameters should satisfy the condition: either
* `increment > 0` and `start >= end`, or `increment < 0` and`start >= end`.
* @param start first element of the progression
* @param end ending bound for the progression
* @param increment increment, or difference of successive elements in the progression
* @return the final element of the progression
* @suppress
*/
@Deprecated("This function supports the compiler infrastructure and is not intended to be used directly from user code. It may become internal soon.")
public fun getProgressionFinalElement(start: Int, end: Int, increment: Int): Int {
if (increment > 0) {
return end - differenceModulo(end, start, increment)
}
else if (increment < 0) {
return end + differenceModulo(start, end, -increment)
}
else {
throw IllegalArgumentException("Increment is zero.")
}
}
public fun getProgressionFinalElement(start: Int, end: Int, increment: Int): Int = getProgressionLastElement(start, end, increment)
/**
* Calculates the final element of a bounded arithmetic progression, i.e. the last element of the progression which is in the range
@@ -76,8 +53,34 @@ public fun getProgressionFinalElement(start: Int, end: Int, increment: Int): Int
* @return the final element of the progression
* @suppress
*/
@Deprecated("This function supports the compiler infrastructure and is not intended to be used directly from user code. It may become internal soon.")
public fun getProgressionFinalElement(start: Long, end: Long, increment: Long): Long {
internal fun getProgressionLastElement(start: Int, end: Int, increment: Int): Int {
if (increment > 0) {
return end - differenceModulo(end, start, increment)
}
else if (increment < 0) {
return end + differenceModulo(start, end, -increment)
}
else {
throw IllegalArgumentException("Increment is zero.")
}
}
@Deprecated("This function supports the compiler infrastructure and is not intended to be used directly from user code. It may become internal soon.")
public fun getProgressionFinalElement(start: Long, end: Long, increment: Long): Long = getProgressionLastElement(start, end, increment)
/**
* Calculates the final element of a bounded arithmetic progression, i.e. the last element of the progression which is in the range
* from [start] to [end] in case of a positive [increment], or from [end] to [start] in case of a negative
* increment.
*
* No validation on passed parameters is performed. The given parameters should satisfy the condition: either
* `increment > 0` and `start >= end`, or `increment < 0` and`start >= end`.
* @param start first element of the progression
* @param end ending bound for the progression
* @param increment increment, or difference of successive elements in the progression
* @return the final element of the progression
* @suppress
*/
internal fun getProgressionLastElement(start: Long, end: Long, increment: Long): Long {
if (increment > 0) {
return end - differenceModulo(end, start, increment)
}
@@ -35,16 +35,16 @@ fun integerProgressionIterator(kind: ProgressionKind): String {
* An iterator over a progression of values of type `$t`.
* @property increment the number by which the value is incremented on each step.
*/
internal class ${t}ProgressionIterator(start: $t, end: $t, val increment: $incrementType) : ${t}Iterator() {
private var next = start$toInt
private val finalElement: $t = getProgressionFinalElement(start$toInt, end$toInt, increment)$toType
private var hasNext: Boolean = if (increment > 0) start <= end else start >= end
internal class ${t}ProgressionIterator(first: $t, last: $t, val increment: $incrementType) : ${t}Iterator() {
private var next = first$toInt
private val finalElement = last$toInt
private var hasNext: Boolean = if (increment > 0) first <= last else first >= last
override fun hasNext(): Boolean = hasNext
override fun next$t(): $t {
val value = next
if (value == finalElement$toInt) {
if (value == finalElement) {
hasNext = false
}
else {
@@ -77,8 +77,6 @@ internal class ${t}ProgressionIterator(start: $t, val end: $t, val increment: $t
class GenerateProgressionIterators(out: PrintWriter) : BuiltInsSourceGenerator(out) {
override fun generateBody() {
out.println("import kotlin.internal.getProgressionFinalElement")
out.println()
for (kind in ProgressionKind.values()) {
if (kind != FLOAT && kind != DOUBLE) {
out.println(integerProgressionIterator(kind))
@@ -74,7 +74,7 @@ public open class $progression
/**
* The last element in the progression.
*/
public val last: $t = kotlin.internal.getProgressionFinalElement(start.to$incrementType(), endInclusive.to$incrementType(), increment).to$t()
public val last: $t = getProgressionLastElement(start.to$incrementType(), endInclusive.to$incrementType(), increment).to$t()
@Deprecated("Use first instead.", ReplaceWith("first"))
public override val start: $t get() = first
@@ -182,6 +182,8 @@ public open class $progression(
}
override fun generateBody() {
out.println("import kotlin.internal.getProgressionLastElement")
out.println()
for (kind in ProgressionKind.values) {
if (kind == FLOAT || kind == DOUBLE)
continue