Skip to content

Commit f061e59

Browse files
committed
Use simpler disambiguation criterion in case of double defs
1 parent 5b3a41d commit f061e59

File tree

1 file changed

+16
-14
lines changed

1 file changed

+16
-14
lines changed

compiler/src/dotty/tools/dotc/core/Denotations.scala

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -449,27 +449,29 @@ object Denotations {
449449
* - minimizes raising of doubleDef errors
450450
*/
451451
def preferSym(sym1: Symbol, sym2: Symbol) =
452-
sym1.eq(sym2) ||
453-
sym1.exists &&
454-
(!sym2.exists ||
455-
sym1.isAsConcrete(sym2) &&
456-
(!sym2.isAsConcrete(sym1) ||
457-
precedes(sym1.owner, sym2.owner) ||
458-
accessBoundary(sym2).isProperlyContainedIn(accessBoundary(sym1)) ||
459-
sym2.is(Bridge) && !sym1.is(Bridge) ||
460-
sym1.is(Method) && !sym2.is(Method)) ||
461-
sym1.info.isErroneous)
452+
sym1.eq(sym2)
453+
|| sym1.exists
454+
&& (!sym2.exists
455+
|| sym1.isAsConcrete(sym2)
456+
&& (!sym2.isAsConcrete(sym1)
457+
|| precedes(sym1.owner, sym2.owner)
458+
|| accessBoundary(sym2).isProperlyContainedIn(accessBoundary(sym1))
459+
|| sym2.is(Bridge) && !sym1.is(Bridge)
460+
|| sym1.is(Method) && !sym2.is(Method))
461+
|| sym1.info.isErroneous)
462+
463+
def preferSymSimple(sym1: Symbol, sym2: Symbol) =
464+
sym1.is(Method) && !sym2.is(Method) || sym1.info.isErroneous
462465

463466
/** Sym preference provided types also override */
464467
def prefer(sym1: Symbol, sym2: Symbol, info1: Type, info2: Type) =
465468
preferSym(sym1, sym2) &&
466469
info1.overrides(info2, sym1.matchNullaryLoosely || sym2.matchNullaryLoosely, checkClassInfo = false)
467470

468471
def handleDoubleDef: Denotation =
469-
if (preferSym(sym1, sym2)) denot1
470-
else if (preferSym(sym2, sym1)) denot2
471-
else if sym1.exists then MultiDenotation(denot1, denot2)
472-
else doubleDefError(denot1, denot2, pre)
472+
if preferSymSimple(sym1, sym2) then denot1
473+
else if preferSymSimple(sym2, sym1) then denot2
474+
else MultiDenotation(denot1, denot2)
473475

474476
if (sym2Accessible && prefer(sym2, sym1, info2, info1)) denot2
475477
else {

0 commit comments

Comments
 (0)