Skip to content

Commit d8c4652

Browse files
committed
Make Factory capture checked
1 parent 087f445 commit d8c4652

File tree

8 files changed

+67
-52
lines changed

8 files changed

+67
-52
lines changed

tests/pos-special/stdlib/collection/Factory.scala

Lines changed: 57 additions & 44 deletions
Large diffs are not rendered by default.

tests/pos-special/stdlib/collection/Iterable.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -400,7 +400,7 @@ trait IterableOps[+A, +CC[_], +C] extends Any with IterableOnce[A] with Iterable
400400
if (i != headSize)
401401
fail
402402
}
403-
iterableFactory.from(bs.map(_.result()))
403+
iterableFactory.from(bs.map(_.result())).asInstanceOf // !!! needed for cc
404404
}
405405

406406
def filter(pred: A => Boolean): C^{this, pred} = fromSpecific(new View.Filter(this, pred, isFlipped = false))
@@ -902,10 +902,10 @@ object IterableOps {
902902
protected def filtered: Iterable[A]^{this} =
903903
new View.Filter(self, p, isFlipped = false)
904904

905-
def map[B](f: A => B): CC[B]^{this} =
905+
def map[B](f: A => B): CC[B]^{this, f} =
906906
self.iterableFactory.from(new View.Map(filtered, f))
907907

908-
def flatMap[B](f: A => IterableOnce[B]): CC[B]^{this} =
908+
def flatMap[B](f: A => IterableOnce[B]): CC[B]^{this, f} =
909909
self.iterableFactory.from(new View.FlatMap(filtered, f))
910910

911911
def foreach[U](f: A => U): Unit = filtered.foreach(f)

tests/pos-special/stdlib/collection/Seq.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@ trait SeqOps[+A, +CC[_], +C] extends Any with SeqViewOps[A, CC, C] { self =>
8282

8383
override def view: SeqView[A] = new SeqView.Id[A](this)
8484

85+
def iterableFactory: FreeSeqFactory[CC]
86+
8587
/** Get the element at the specified index. This operation is provided for convenience in `Seq`. It should
8688
* not be assumed to be efficient unless you have an `IndexedSeq`. */
8789
@throws[IndexOutOfBoundsException]

tests/pos-special/stdlib/collection/immutable/Iterable.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ trait Iterable[+A] extends collection.Iterable[A]
3232

3333
@SerialVersionUID(3L)
3434
object Iterable extends IterableFactory.Delegate[Iterable](List) {
35-
override def from[E](it: IterableOnce[E]): Iterable[E] = it match {
35+
override def from[E](it: IterableOnce[E]^): Iterable[E]^{it} = it match {
3636
case iterable: Iterable[E] => iterable
3737
case _ => super.from(it)
3838
}

tests/pos-special/stdlib/collection/mutable/ArrayDeque.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -526,7 +526,7 @@ class ArrayDeque[sealed A] protected (
526526
@SerialVersionUID(3L)
527527
object ArrayDeque extends StrictOptimizedSeqFactory[ArrayDeque] {
528528

529-
def from[sealed B](coll: collection.IterableOnce[B]): ArrayDeque[B] = {
529+
def from[sealed B](coll: collection.IterableOnce[B]^): ArrayDeque[B] = {
530530
val s = coll.knownSize
531531
if (s >= 0) {
532532
val array = alloc(s)

tests/pos-special/stdlib/collection/mutable/ArraySeq.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ object ArraySeq extends StrictOptimizedClassTagSeqFactory[ArraySeq] { self =>
110110
private[this] val EmptyArraySeq = new ofRef[AnyRef](new Array[AnyRef](0))
111111
def empty[T : ClassTag]: ArraySeq[T] = EmptyArraySeq.asInstanceOf[ArraySeq[T]]
112112

113-
def from[sealed A : ClassTag](it: scala.collection.IterableOnce[A]): ArraySeq[A] = make(Array.from[A](it))
113+
def from[sealed A : ClassTag](it: scala.collection.IterableOnce[A]^): ArraySeq[A] = make(Array.from[A](it))
114114

115115
def newBuilder[sealed A : ClassTag]: Builder[A, ArraySeq[A]] = ArrayBuilder.make[A].mapResult(make)
116116

tests/pos-special/stdlib/collection/mutable/Queue.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ class Queue[sealed A] protected (array: Array[AnyRef], start: Int, end: Int)
130130
@SerialVersionUID(3L)
131131
object Queue extends StrictOptimizedSeqFactory[Queue] {
132132

133-
def from[sealed A](source: IterableOnce[A]): Queue[A] = empty ++= source
133+
def from[sealed A](source: IterableOnce[A]^): Queue[A] = empty ++= source
134134

135135
def empty[sealed A]: Queue[A] = new Queue
136136

tests/pos-special/stdlib/collection/mutable/Stack.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ class Stack[sealed A] protected (array: Array[AnyRef], start: Int, end: Int)
135135
@SerialVersionUID(3L)
136136
object Stack extends StrictOptimizedSeqFactory[Stack] {
137137

138-
def from[sealed A](source: IterableOnce[A]): Stack[A] = empty ++= source
138+
def from[sealed A](source: IterableOnce[A]^): Stack[A] = empty ++= source
139139

140140
def empty[sealed A]: Stack[A] = new Stack
141141

0 commit comments

Comments
 (0)