summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2012-08-16 16:46:15 -0700
committerPaul Phillips <paulp@improving.org>2012-08-16 16:46:42 -0700
commit0fc0038e33b629efcaa0aa314b0e69419c116777 (patch)
tree51ea2b053fac4495305c92e5d34677a3563af471 /src
parent0308ae88026a4a8d427d1a9156c31c0ff8dd2561 (diff)
downloadscala-0fc0038e33b629efcaa0aa314b0e69419c116777.tar.gz
scala-0fc0038e33b629efcaa0aa314b0e69419c116777.tar.bz2
scala-0fc0038e33b629efcaa0aa314b0e69419c116777.zip
Modified SI-6150 fix to use intended ReusableCBF.
I also realized it didn't have to be lazy, and made it so.
Diffstat (limited to 'src')
-rw-r--r--src/library/scala/collection/IndexedSeq.scala9
-rw-r--r--src/library/scala/collection/generic/GenTraversableFactory.scala4
-rw-r--r--src/library/scala/collection/immutable/IndexedSeq.scala3
-rw-r--r--src/library/scala/collection/immutable/Vector.scala6
4 files changed, 12 insertions, 10 deletions
diff --git a/src/library/scala/collection/IndexedSeq.scala b/src/library/scala/collection/IndexedSeq.scala
index 4d1758fdd3..39be1f7a9e 100644
--- a/src/library/scala/collection/IndexedSeq.scala
+++ b/src/library/scala/collection/IndexedSeq.scala
@@ -29,9 +29,12 @@ trait IndexedSeq[+A] extends Seq[A]
* @define Coll `IndexedSeq`
*/
object IndexedSeq extends SeqFactory[IndexedSeq] {
- override lazy val ReusableCBF: GenericCanBuildFrom[Nothing] = new ReusableCBF
-
- implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, IndexedSeq[A]] = IndexedSeq.ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]]
+ override val ReusableCBF: GenericCanBuildFrom[Nothing] = new GenericCanBuildFrom[Nothing] {
+ override def apply() = newBuilder[Nothing]
+ }
+ implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, IndexedSeq[A]] =
+ ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]]
+
def newBuilder[A]: Builder[A, IndexedSeq[A]] = immutable.IndexedSeq.newBuilder[A]
}
diff --git a/src/library/scala/collection/generic/GenTraversableFactory.scala b/src/library/scala/collection/generic/GenTraversableFactory.scala
index 3d5306621a..076f555506 100644
--- a/src/library/scala/collection/generic/GenTraversableFactory.scala
+++ b/src/library/scala/collection/generic/GenTraversableFactory.scala
@@ -40,11 +40,9 @@ abstract class GenTraversableFactory[CC[X] <: GenTraversable[X] with GenericTrav
// A default implementation of GenericCanBuildFrom which can be cast
// to whatever is desired.
- private[collection] class ReusableCBF extends GenericCanBuildFrom[Nothing] {
+ val ReusableCBF: GenericCanBuildFrom[Nothing] = new GenericCanBuildFrom[Nothing] {
override def apply() = newBuilder[Nothing]
}
- // Working around SI-4789 by using a lazy val instead of an object.
- lazy val ReusableCBF: GenericCanBuildFrom[Nothing] = new ReusableCBF
/** A generic implementation of the `CanBuildFrom` trait, which forwards
* all calls to `apply(from)` to the `genericBuilder` method of
diff --git a/src/library/scala/collection/immutable/IndexedSeq.scala b/src/library/scala/collection/immutable/IndexedSeq.scala
index 3abac932e6..68f642b558 100644
--- a/src/library/scala/collection/immutable/IndexedSeq.scala
+++ b/src/library/scala/collection/immutable/IndexedSeq.scala
@@ -36,6 +36,7 @@ object IndexedSeq extends SeqFactory[IndexedSeq] {
def length = buf.length
def apply(idx: Int) = buf.apply(idx)
}
- implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, IndexedSeq[A]] = IndexedSeq.ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]]
+ implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, IndexedSeq[A]] =
+ scala.collection.IndexedSeq.ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]]
def newBuilder[A]: Builder[A, IndexedSeq[A]] = Vector.newBuilder[A]
}
diff --git a/src/library/scala/collection/immutable/Vector.scala b/src/library/scala/collection/immutable/Vector.scala
index d0098e8420..f912285143 100644
--- a/src/library/scala/collection/immutable/Vector.scala
+++ b/src/library/scala/collection/immutable/Vector.scala
@@ -19,7 +19,7 @@ import scala.collection.parallel.immutable.ParVector
*/
object Vector extends SeqFactory[Vector] {
@inline implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Vector[A]] =
- IndexedSeq.ReusableCBF.asInstanceOf[CanBuildFrom[Coll, A, Vector[A]]]
+ scala.collection.IndexedSeq.ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]]
def newBuilder[A]: Builder[A, Vector[A]] = new VectorBuilder[A]
private[immutable] val NIL = new Vector[Nothing](0, 0, 0)
@inline override def empty[A]: Vector[A] = NIL
@@ -144,11 +144,11 @@ override def companion: GenericCompanion[Vector] = Vector
if (bf eq IndexedSeq.ReusableCBF) updateAt(index, elem).asInstanceOf[That] // just ignore bf
else super.updated(index, elem)(bf)
- @inline override def +:[B >: A, That](elem: B)(implicit bf: CanBuildFrom[Vector[A], B, That]): That =
+ @inline override def +:[B >: A, That](elem: B)(implicit bf: CanBuildFrom[Vector[A], B, That]): That =
if (bf eq IndexedSeq.ReusableCBF) appendFront(elem).asInstanceOf[That] // just ignore bf
else super.+:(elem)(bf)
- @inline override def :+[B >: A, That](elem: B)(implicit bf: CanBuildFrom[Vector[A], B, That]): That =
+ @inline override def :+[B >: A, That](elem: B)(implicit bf: CanBuildFrom[Vector[A], B, That]): That =
if (bf eq IndexedSeq.ReusableCBF) appendBack(elem).asInstanceOf[That] // just ignore bf
else super.:+(elem)(bf)