diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2014-03-25 11:07:32 +0100 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2014-03-25 11:07:32 +0100 |
commit | 2aeb90778eafb8c3afdb102989546dbe28a41da4 (patch) | |
tree | b0723c972d984e14f6fdea4a47011eb23cea4cc6 /src | |
parent | 4aa58d48d27bb722290c12335da82f32021b8ede (diff) | |
parent | aa1e1d09fe2a2c2cc0b88a5a56f1a9010ac05092 (diff) | |
download | scala-2aeb90778eafb8c3afdb102989546dbe28a41da4.tar.gz scala-2aeb90778eafb8c3afdb102989546dbe28a41da4.tar.bz2 scala-2aeb90778eafb8c3afdb102989546dbe28a41da4.zip |
Merge pull request #3644 from retronym/ticket/8431
SI-8428 Fix regression in iterator concatenation
Diffstat (limited to 'src')
-rw-r--r-- | src/library/scala/collection/Iterator.scala | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/library/scala/collection/Iterator.scala b/src/library/scala/collection/Iterator.scala index 01a0aa3b51..1b496383a3 100644 --- a/src/library/scala/collection/Iterator.scala +++ b/src/library/scala/collection/Iterator.scala @@ -165,11 +165,11 @@ object Iterator { /** Avoid stack overflows when applying ++ to lots of iterators by * flattening the unevaluated iterators out into a vector of closures. */ - private[scala] final class ConcatIterator[+A](initial: Vector[() => Iterator[A]]) extends Iterator[A] { - // current set to null when all iterators are exhausted - private[this] var current: Iterator[A] = Iterator.empty + private[scala] final class ConcatIterator[+A](private[this] var current: Iterator[A], initial: Vector[() => Iterator[A]]) extends Iterator[A] { + @deprecated def this(initial: Vector[() => Iterator[A]]) = this(Iterator.empty, initial) // for binary compatibility private[this] var queue: Vector[() => Iterator[A]] = initial // Advance current to the next non-empty iterator + // current is set to null when all iterators are exhausted private[this] def advance(): Boolean = { if (queue.isEmpty) { current = null @@ -185,7 +185,7 @@ object Iterator { def next() = if (hasNext) current.next else Iterator.empty.next override def ++[B >: A](that: => GenTraversableOnce[B]): Iterator[B] = - new ConcatIterator(queue :+ (() => that.toIterator)) + new ConcatIterator(current, queue :+ (() => that.toIterator)) } private[scala] final class JoinIterator[+A](lhs: Iterator[A], that: => GenTraversableOnce[A]) extends Iterator[A] { @@ -194,7 +194,7 @@ object Iterator { def next = if (lhs.hasNext) lhs.next else rhs.next override def ++[B >: A](that: => GenTraversableOnce[B]) = - new ConcatIterator(Vector(() => this, () => that.toIterator)) + new ConcatIterator(this, Vector(() => that.toIterator)) } } |