summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/library/scala/collection/Iterator.scala11
-rw-r--r--src/library/scala/collection/generic/IterableTemplate.scala2
-rw-r--r--src/library/scala/collection/mutable/StringBuilder.scala25
3 files changed, 14 insertions, 24 deletions
diff --git a/src/library/scala/collection/Iterator.scala b/src/library/scala/collection/Iterator.scala
index 9e8cb67a65..427cd77558 100644
--- a/src/library/scala/collection/Iterator.scala
+++ b/src/library/scala/collection/Iterator.scala
@@ -12,6 +12,7 @@
package scala.collection
import mutable.{Buffer, ArrayBuffer, ListBuffer}
+import annotation.tailrec
// import immutable.{List, Nil, ::, Stream}
/** The <code>Iterator</code> object provides various functions for
@@ -298,8 +299,14 @@ trait Iterator[+A] { self =>
* @param n the number of elements to drop
* @return the new iterator
*/
- def drop(n: Int): Iterator[A] =
- if (n > 0 && hasNext) { next(); drop(n - 1) } else this
+ def drop(n: Int): Iterator[A] = {
+ @tailrec
+ def loop(left: Int): Iterator[A] =
+ if (left > 0 && hasNext) { next; loop(left - 1) }
+ else this
+
+ loop(n)
+ }
/** Advances this iterator past the first `from` elements using `drop`,
* and then takes `until - from` elements, using `take`.
diff --git a/src/library/scala/collection/generic/IterableTemplate.scala b/src/library/scala/collection/generic/IterableTemplate.scala
index 3477634821..01cbbcf25b 100644
--- a/src/library/scala/collection/generic/IterableTemplate.scala
+++ b/src/library/scala/collection/generic/IterableTemplate.scala
@@ -151,7 +151,7 @@ trait IterableTemplate[+A, +This <: IterableTemplate[A, This] with Iterable[A]]
*
* @note will not terminate for infinite-sized iterables.
* @param that the other iterable
- * @return true, iff both iterables contain the same elements.
+ * @return true, iff both iterables contain the same elements in the same order.
* @note Might return different results for different runs, unless this iterable is ordered
*/
def sameElements[B >: A](that: Iterable[B]): Boolean = {
diff --git a/src/library/scala/collection/mutable/StringBuilder.scala b/src/library/scala/collection/mutable/StringBuilder.scala
index db0b633b2d..d1aaa1234d 100644
--- a/src/library/scala/collection/mutable/StringBuilder.scala
+++ b/src/library/scala/collection/mutable/StringBuilder.scala
@@ -804,8 +804,8 @@ final class StringBuilder(initCapacity: Int, private val initValue: String)
val temp2 = array(n - j)
if (!hasSurrogate)
hasSurrogate =
- (temp >= StringBuilder.MIN_SURROGATE && temp <= StringBuilder.MAX_SURROGATE) ||
- (temp2 >= StringBuilder.MIN_SURROGATE && temp2 <= StringBuilder.MAX_SURROGATE)
+ (temp >= Character.MIN_HIGH_SURROGATE && temp <= Character.MAX_LOW_SURROGATE) ||
+ (temp2 >= Character.MIN_HIGH_SURROGATE && temp2 <= Character.MAX_LOW_SURROGATE)
array(j) = temp2
array(n - j) = temp
j -= 1
@@ -815,9 +815,9 @@ final class StringBuilder(initCapacity: Int, private val initValue: String)
var i = 0
while (i < count - 1) {
val c2 = array(i)
- if (StringBuilder.isLowSurrogate(c2)) {
+ if (Character.isLowSurrogate(c2)) {
val c1 = array(i + 1)
- if (StringBuilder.isHighSurrogate(c1)) {
+ if (Character.isHighSurrogate(c1)) {
array(i) = c1; i += 1
array(i) = c2
}
@@ -847,23 +847,6 @@ object StringBuilder {
type Array[T] = scala.Array[T] // !!!
- private val MIN_HIGH_SURROGATE = '\uD800'
- private val MAX_HIGH_SURROGATE = '\uDBFF'
-
- private val MIN_LOW_SURROGATE = '\uDC00'
- private val MAX_LOW_SURROGATE = '\uDFFF'
-
- // constants <code>java.langCharacter.MIN-/MAX_SURROGATE</code> exist since 1.5
- private val MIN_SURROGATE = MIN_HIGH_SURROGATE
- private val MAX_SURROGATE = MAX_LOW_SURROGATE
-
- // methods <code>java.langCharacter.isLow-/isHighSurrogate</code> exist since 1.5
- private def isLowSurrogate(ch: Char): Boolean =
- MIN_LOW_SURROGATE <= ch && ch <= MAX_LOW_SURROGATE
-
- private def isHighSurrogate(ch: Char): Boolean =
- MIN_HIGH_SURROGATE <= ch && ch <= MAX_HIGH_SURROGATE
-
// method <code>java.util.Arrays.copyOf</code> exists since 1.6
private def copyOf(src: Array[Char], newLength: Int): Array[Char] = {
val dest = new Array[Char](newLength)