Skip to content

Commit 3da78ac

Browse files
committed
Use util.HashSet for member checking
It's more efficient. Let's see whether that makes a difference.
1 parent 69b1547 commit 3da78ac

File tree

2 files changed

+6
-5
lines changed

2 files changed

+6
-5
lines changed

compiler/src/dotty/tools/dotc/typer/RefChecks.scala

+5-5
Original file line numberDiff line numberDiff line change
@@ -608,16 +608,16 @@ object RefChecks {
608608
// - members in other concrete classes, since these have been checked before
609609
// (this is done for efficiency)
610610
// - members in a prefix of inherited parents that all come from Java or Scala2
611-
// (this is done to avoid false negatives since Scala2's rules for checking are different)
612-
val membersToCheck = mutable.Set[Name]()
613-
val seenClasses = mutable.Set[Symbol]()
611+
// (this is done to avoid false positives since Scala2's rules for checking are different)
612+
val membersToCheck = new util.HashSet[Name](4096)
613+
val seenClasses = new util.HashSet[Symbol](256)
614614
def addDecls(cls: Symbol): Unit =
615615
if (!seenClasses.contains(cls)) {
616-
seenClasses.+=(cls)
616+
seenClasses.addEntry(cls)
617617
for (mbr <- cls.info.decls)
618618
if (mbr.isTerm && !mbr.is(Synthetic | Bridge) && mbr.memberCanMatchInheritedSymbols &&
619619
!membersToCheck.contains(mbr.name))
620-
membersToCheck.+=(mbr.name)
620+
membersToCheck.addEntry(mbr.name)
621621
cls.info.parents.map(_.classSymbol)
622622
.filter(_.is(AbstractOrTrait))
623623
.dropWhile(_.is(JavaDefined | Scala2x))

compiler/src/dotty/tools/dotc/util/HashSet.scala

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ class HashSet[T >: Null <: AnyRef](powerOfTwoInitialCapacity: Int, loadFactor: F
77
private[this] var limit: Int = _
88
private[this] var table: Array[AnyRef] = _
99

10+
assert(Integer.bitCount(powerOfTwoInitialCapacity) == 1)
1011
protected def isEqual(x: T, y: T): Boolean = x.equals(y)
1112

1213
// Counters for Stats

0 commit comments

Comments
 (0)