Skip to content

Commit 7867f8c

Browse files
committed
ExplicitOuter: fix generation of outer methods for indirectly inherited traits.
1 parent dc1f711 commit 7867f8c

File tree

1 file changed

+9
-4
lines changed

1 file changed

+9
-4
lines changed

src/dotty/tools/dotc/transform/ExplicitOuter.scala

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,14 +84,19 @@ class ExplicitOuter extends MiniPhaseTransform with InfoTransformer { thisTransf
8484
newDefs += ValDef(outerParamAcc, EmptyTree)
8585
newDefs += DefDef(outerAccessor(cls).asTerm, ref(outerParamAcc))
8686
}
87+
88+
for (parentTrait <- cls.mixins) {
89+
if (needsOuterIfReferenced(parentTrait)) {
90+
val parentTp = cls.denot.thisType.baseTypeRef(parentTrait)
91+
val outerAccImpl = newOuterAccessor(cls, parentTrait).enteredAfter(thisTransformer)
92+
newDefs += DefDef(outerAccImpl, singleton(outerPrefix(parentTp)))
93+
}
94+
}
95+
8796
val parents1 =
8897
for (parent <- impl.parents) yield {
8998
val parentCls = parent.tpe.classSymbol.asClass
9099
if (parentCls.is(Trait)) {
91-
if (needsOuterIfReferenced(parentCls)) {
92-
val outerAccImpl = newOuterAccessor(cls, parentCls).enteredAfter(thisTransformer)
93-
newDefs += DefDef(outerAccImpl, singleton(outerPrefix(parent.tpe)))
94-
}
95100
parent
96101
}
97102
else parent match { // ensure class parent is a constructor

0 commit comments

Comments
 (0)