Skip to content

Commit 07ea487

Browse files
DarkDimiusodersky
authored andcommitted
Fix handling of superCalls.
1. There may be calls to super on non-this. 2. there may be calls to in-dirrect super-traits.
1 parent a062bac commit 07ea487

File tree

2 files changed

+10
-3
lines changed

2 files changed

+10
-3
lines changed

src/dotty/tools/backend/jvm/CollectSuperCalls.scala

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,11 @@ class CollectSuperCalls extends MiniPhaseTransform {
2020

2121
override def transformSelect(tree: Select)(implicit ctx: Context, info: TransformerInfo): Tree = {
2222
tree.qualifier match {
23-
case Super(qual: This, mix) if mix.nonEmpty =>
24-
val classSymbol = qual.symbol.asClass.classSymbol
23+
case Super(qual, mix) if mix.nonEmpty =>
24+
val classSymbol: ClassSymbol = qual match {
25+
case qual: This => qual.symbol.asClass.classSymbol
26+
case qual => qual.symbol.info.classSymbol.asClass
27+
}
2528
registerSuperCall(classSymbol, tree.symbol.owner.asClass)
2629
case _ =>
2730
}

src/dotty/tools/backend/jvm/DottyBackendInterface.scala

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -747,9 +747,13 @@ class DottyBackendInterface(outputDirectory: AbstractFile, val superCallsMap: Ma
747747
*/
748748
def superInterfaces: List[Symbol] = {
749749
val directlyInheritedTraits = decorateSymbol(sym).directlyInheritedTraits
750+
val directlyInheritedTraitsSet = directlyInheritedTraits.toSet
750751
val allBaseClasses = directlyInheritedTraits.iterator.flatMap(_.symbol.asClass.baseClasses.drop(1)).toSet
751752
val superCalls = superCallsMap.getOrElse(sym, Set.empty)
752-
directlyInheritedTraits.filter(t => !allBaseClasses(t) || superCalls(t))
753+
val additional = (superCalls -- directlyInheritedTraitsSet).filter(_.is(Flags.Trait))
754+
// if (additional.nonEmpty)
755+
// println(s"$fullName: adding supertraits $additional")
756+
directlyInheritedTraits.filter(t => !allBaseClasses(t) || superCalls(t)) ++ additional
753757
}
754758

755759
/**

0 commit comments

Comments
 (0)