Skip to content

Commit bc13c67

Browse files
authored
Merge pull request #9640 from dotty-staging/optimize-implicits
Optimize computeEligible
2 parents 61512f1 + fbc0a88 commit bc13c67

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

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

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -338,10 +338,13 @@ object Implicits:
338338
if (monitored) record(s"check eligible refs in irefCtx", refs.length)
339339
val ownEligible = filterMatching(tp)
340340
if (isOuterMost) ownEligible
341-
else ownEligible ::: {
342-
val shadowed = ownEligible.map(_.ref.implicitName).toSet
343-
outerImplicits.eligible(tp).filterNot(cand => shadowed.contains(cand.ref.implicitName))
344-
}
341+
else if ownEligible.isEmpty then outerImplicits.eligible(tp)
342+
else
343+
val outerEligible = outerImplicits.eligible(tp)
344+
if outerEligible.isEmpty then ownEligible
345+
else
346+
val shadowed = ownEligible.map(_.ref.implicitName).toSet
347+
ownEligible ::: outerEligible.filterConserve(cand => !shadowed.contains(cand.ref.implicitName))
345348
}
346349

347350
override def isAccessible(ref: TermRef)(using Context): Boolean =

0 commit comments

Comments
 (0)