@@ -786,32 +786,29 @@ object RefChecks {
786
786
//
787
787
// In particular, it checks that there are no two base classes with
788
788
// different type instantiations.
789
- //
790
- // ported from Scala 2:
791
- // https://github.com/scala/scala/blob/9bb659e62a9239c01aec14c171f8598bb1a576fe/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala#L834-L883
792
789
def validateBaseTypes (): Unit = {
793
790
val tpe = clazz.thisType // in Scala 2 this was clazz.tpe
794
791
val seenParents = mutable.HashSet [Type ]()
795
792
val baseClasses : List [ClassSymbol ] = clazz.info.baseClasses
796
793
797
794
// tracks types that we have seen for a particular base class in baseClasses
798
- val seenTypes = mutable. Map .empty[ Symbol , List [Type ]]
795
+ val seenTypes = MutableSymbolMap [ List [Type ]](baseClasses.size)
799
796
800
797
// validate all base types of a class in reverse linear order.
801
798
def register (tp : Type ): Unit = {
802
- val baseClass = tp.typeSymbol
799
+ val baseClass = tp.classSymbol
803
800
if (baseClasses contains baseClass) {
804
801
val alreadySeen = seenTypes.getOrElse(baseClass, Nil )
805
- if (alreadySeen.forall { tp1 => ! (tp1 <:< tp) } )
806
- seenTypes.update(baseClass, tp :: alreadySeen.filter { tp1 => ! (tp <:< tp1) } )
802
+ if (alreadySeen.forall( tp1 => ! (tp1 <:< tp)) )
803
+ seenTypes.update(baseClass, tp :: alreadySeen.filter( tp1 => ! (tp <:< tp1)) )
807
804
}
808
805
val remaining = tp.parents filterNot seenParents
809
806
seenParents ++= remaining
810
807
remaining foreach register
811
808
}
812
809
register(tpe)
813
810
814
- seenTypes.foreach {
811
+ seenTypes.iterator. foreach {
815
812
case (cls, Nil ) =>
816
813
assert(false ) // this case should not be reachable
817
814
case (cls, _ :: Nil ) =>
0 commit comments