Skip to content

Commit bd6c1d2

Browse files
szeigersmarter
authored andcommitted
Fixes for Dotty compatibility
- `CollisionProofHashMap` was missing overrides for `fromSpecific`, `newSpecificBuilder` and `empty` - `TreeSet.from` exploited a GADT unsoundness in scalac
1 parent cb47197 commit bd6c1d2

File tree

2 files changed

+7
-1
lines changed

2 files changed

+7
-1
lines changed

src/library/scala/collection/mutable/CollisionProofHashMap.scala

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ package mutable
1515

1616
import scala.annotation.meta.{getter, setter}
1717
import scala.annotation.tailrec
18+
import scala.annotation.unchecked.uncheckedVariance
1819
import scala.collection.generic.DefaultSerializationProxy
1920
import scala.collection.mutable
2021
import scala.runtime.Statics
@@ -63,6 +64,11 @@ final class CollisionProofHashMap[K, V](initialCapacity: Int, loadFactor: Double
6364

6465
@`inline` private[this] final def index(hash: Int) = hash & (table.length - 1)
6566

67+
override protected def fromSpecific(coll: IterableOnce[(K, V)] @uncheckedVariance): CollisionProofHashMap[K, V] @uncheckedVariance = CollisionProofHashMap.from(coll)
68+
override protected def newSpecificBuilder: Builder[(K, V), CollisionProofHashMap[K, V]] @uncheckedVariance = CollisionProofHashMap.newBuilder[K, V]
69+
70+
override def empty: CollisionProofHashMap[K, V] = new CollisionProofHashMap[K, V]
71+
6672
override def contains(key: K): Boolean = findNode(key) ne null
6773

6874
def get(key: K): Option[V] = findNode(key) match {

src/library/scala/collection/mutable/TreeSet.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ object TreeSet extends SortedIterableFactory[TreeSet] {
194194
new TreeSet[E](RB.fromOrderedKeys(ss.iterator, ss.size))
195195
case r: Range if (ordering eq Ordering.Int) || (ordering eq Ordering.Int.reverse) =>
196196
val it = if((ordering eq Ordering.Int) == (r.step > 0)) r.iterator else r.reverseIterator
197-
new TreeSet[E](RB.fromOrderedKeys(it, r.size))
197+
new TreeSet[E](RB.fromOrderedKeys(it.asInstanceOf[Iterator[E]], r.size))
198198
case _ =>
199199
val t: RB.Tree[E, Null] = RB.Tree.empty
200200
val i = it.iterator

0 commit comments

Comments
 (0)