Skip to content

Commit 81fd5c6

Browse files
committed
Merge remote-tracking branch 'origin/2.12.x' into backport/sbt-bump
2 parents 0b09b73 + c1f0c2d commit 81fd5c6

File tree

3 files changed

+28
-1
lines changed

3 files changed

+28
-1
lines changed

library/src/scala/collection/immutable/HashMap.scala

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,21 @@ sealed class HashMap[A, +B] extends AbstractMap[A, B]
139139

140140
override def par = ParHashMap.fromTrie(this)
141141

142+
/* Override to avoid tuple allocation in foreach */
143+
private[collection] class HashMapKeys extends ImmutableDefaultKeySet {
144+
override def foreach[U](f: A => U) = foreachEntry((key, _) => f(key))
145+
override lazy val hashCode = super.hashCode()
146+
}
147+
override def keySet: immutable.Set[A] = new HashMapKeys
148+
149+
/** The implementation class of the iterable returned by `values`.
150+
*/
151+
private[collection] class HashMapValues extends DefaultValuesIterable {
152+
override def foreach[U](f: B => U) = foreachEntry((_, value) => f(value))
153+
}
154+
override def values: scala.collection.Iterable[B] = new HashMapValues
155+
156+
142157
}
143158

144159
/** $factoryInfo

library/src/scala/collection/immutable/TreeMap.scala

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,4 +215,11 @@ final class TreeMap[A, +B] private (tree: RB.Tree[A, B])(implicit val ordering:
215215
}
216216
}
217217

218+
override def keySet: SortedSet[A] = new DefaultKeySortedSet {
219+
override def foreach[U](f: A => U): Unit = RB.foreachEntry(tree, {(key: A, _: B) => f(key)})
220+
}
221+
222+
override def values: scala.Iterable[B] = new DefaultValuesIterable {
223+
override def foreach[U](f: B => U): Unit = RB.foreachEntry(tree, {(_: A, value: B) => f(value)})
224+
}
218225
}

library/src/scala/collection/mutable/ListBuffer.scala

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -306,13 +306,18 @@ final class ListBuffer[A]
306306
def result: List[A] = toList
307307

308308
/** Converts this buffer to a list. Takes constant time. The buffer is
309-
* copied lazily, the first time it is mutated.
309+
* copied lazily the first time it is mutated.
310310
*/
311311
override def toList: List[A] = {
312312
exported = !isEmpty
313313
start
314314
}
315315

316+
// scala/bug#11869
317+
override def toSeq: collection.Seq[A] = toList
318+
override def toIterable: collection.Iterable[A] = toList
319+
override def toStream: immutable.Stream[A] = toList.toStream // mind the laziness
320+
316321
// New methods in ListBuffer
317322

318323
/** Prepends the elements of this buffer to a given list

0 commit comments

Comments
 (0)