summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAleksandar Prokopec <axel22@gmail.com>2012-07-18 11:41:03 +0200
committerAleksandar Prokopec <axel22@gmail.com>2012-07-18 11:41:03 +0200
commitd8fbd9a54d7c7e923df4978d6368951d55360e3e (patch)
treed8e25a6929f270237bb6df711b53d566d0eb372b /src
parent4f07a12b3f4ce1595d4976123e5cfe34e186d4ba (diff)
downloadscala-d8fbd9a54d7c7e923df4978d6368951d55360e3e.tar.gz
scala-d8fbd9a54d7c7e923df4978d6368951d55360e3e.tar.bz2
scala-d8fbd9a54d7c7e923df4978d6368951d55360e3e.zip
Fix SI-5937.
Diffstat (limited to 'src')
-rw-r--r--src/library/scala/collection/immutable/Vector.scala26
1 files changed, 16 insertions, 10 deletions
diff --git a/src/library/scala/collection/immutable/Vector.scala b/src/library/scala/collection/immutable/Vector.scala
index d100bf93df..1a0ef5eee7 100644
--- a/src/library/scala/collection/immutable/Vector.scala
+++ b/src/library/scala/collection/immutable/Vector.scala
@@ -18,8 +18,14 @@ import scala.collection.parallel.immutable.ParVector
/** Companion object to the Vector class
*/
object Vector extends SeqFactory[Vector] {
+ private[collection] class VectorReusableCBF extends GenericCanBuildFrom[Nothing] {
+ override def apply() = newBuilder[Nothing]
+ }
+
+ lazy val VectorReusableCBF: GenericCanBuildFrom[Nothing] = new VectorReusableCBF
+
@inline implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Vector[A]] =
- ReusableCBF.asInstanceOf[CanBuildFrom[Coll, A, Vector[A]]]
+ VectorReusableCBF.asInstanceOf[CanBuildFrom[Coll, A, Vector[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
@@ -140,19 +146,19 @@ override def companion: GenericCompanion[Vector] = Vector
// SeqLike api
- @inline override def updated[B >: A, That](index: Int, elem: B)(implicit bf: CanBuildFrom[Vector[A], B, That]): That = {
- // just ignore bf
- updateAt(index, elem).asInstanceOf[That]
+ @inline override def updated[B >: A, That](index: Int, elem: B)(implicit bf: CanBuildFrom[Vector[A], B, That]): That = bf match {
+ case _: Vector.VectorReusableCBF => updateAt(index, elem).asInstanceOf[That] // just ignore bf
+ case _ => super.updated(index, elem)(bf)
}
- @inline override def +:[B >: A, That](elem: B)(implicit bf: CanBuildFrom[Vector[A], B, That]): That = {
- // just ignore bf
- appendFront(elem).asInstanceOf[That]
+ @inline override def +:[B >: A, That](elem: B)(implicit bf: CanBuildFrom[Vector[A], B, That]): That = bf match {
+ case _: Vector.VectorReusableCBF => appendFront(elem).asInstanceOf[That] // just ignore bf
+ case _ => super.+:(elem)(bf)
}
- @inline override def :+[B >: A, That](elem: B)(implicit bf: CanBuildFrom[Vector[A], B, That]): That = {
- // just ignore bf
- appendBack(elem).asInstanceOf[That]
+ @inline override def :+[B >: A, That](elem: B)(implicit bf: CanBuildFrom[Vector[A], B, That]): That = bf match {
+ case _: Vector.VectorReusableCBF => appendBack(elem).asInstanceOf[That] // just ignore bf
+ case _ => super.:+(elem)(bf)
}
override def take(n: Int): Vector[A] = {