diff options
author | Grzegorz Kossakowski <grzegorz.kossakowski@gmail.com> | 2011-07-13 11:39:16 +0000 |
---|---|---|
committer | Grzegorz Kossakowski <grzegorz.kossakowski@gmail.com> | 2011-07-13 11:39:16 +0000 |
commit | c849eb7c7dbb900315cc36c990f22efaf7019d60 (patch) | |
tree | 10d3998577d85a204786f536b9e7b58d67d41719 | |
parent | 8a0d130537be8c3716ab9191d84c53d39aaa1804 (diff) | |
download | scala-c849eb7c7dbb900315cc36c990f22efaf7019d60.tar.gz scala-c849eb7c7dbb900315cc36c990f22efaf7019d60.tar.bz2 scala-c849eb7c7dbb900315cc36c990f22efaf7019d60.zip |
Get rid of structural type in Iterator.scala
Implementation of Iterator.scala defined a structural type by mistake.
By naming a class we get rid of that structural type.
Fixes #4791. No review.
-rw-r--r-- | src/library/scala/collection/Iterator.scala | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/library/scala/collection/Iterator.scala b/src/library/scala/collection/Iterator.scala index 0fc37966da..8880127a3d 100644 --- a/src/library/scala/collection/Iterator.scala +++ b/src/library/scala/collection/Iterator.scala @@ -507,7 +507,14 @@ trait Iterator[+A] extends TraversableOnce[A] { */ def span(p: A => Boolean): (Iterator[A], Iterator[A]) = { val self = buffered - val leading = new Iterator[A] { + + /** + * Giving a name to following iterator (as opposed to trailing) because + * anonymous class is represented as a structural type that trailing + * iterator is referring (the finish() method) and thus triggering + * handling of structural calls. It's not what's intended here. + */ + class Leading extends Iterator[A] { private var isDone = false val lookahead = new mutable.Queue[A] def advance() = { @@ -528,6 +535,7 @@ trait Iterator[+A] extends TraversableOnce[A] { lookahead.dequeue() } } + val leading = new Leading val trailing = new Iterator[A] { private lazy val it = { leading.finish() |