diff options
author | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2016-08-24 13:39:52 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2016-09-19 11:07:43 +0200 |
commit | 07ea487704abe8969efcbb6672ce63a1748bbd73 (patch) | |
tree | 94d1746a0d7516347a955a401006d55eab89a845 /src/dotty/tools/backend/jvm | |
parent | a062bac8923700966a260b3f6d025221dce0b5a7 (diff) | |
download | dotty-07ea487704abe8969efcbb6672ce63a1748bbd73.tar.gz dotty-07ea487704abe8969efcbb6672ce63a1748bbd73.tar.bz2 dotty-07ea487704abe8969efcbb6672ce63a1748bbd73.zip |
Fix handling of superCalls.
1. There may be calls to super on non-this.
2. there may be calls to in-dirrect super-traits.
Diffstat (limited to 'src/dotty/tools/backend/jvm')
-rw-r--r-- | src/dotty/tools/backend/jvm/CollectSuperCalls.scala | 7 | ||||
-rw-r--r-- | src/dotty/tools/backend/jvm/DottyBackendInterface.scala | 6 |
2 files changed, 10 insertions, 3 deletions
diff --git a/src/dotty/tools/backend/jvm/CollectSuperCalls.scala b/src/dotty/tools/backend/jvm/CollectSuperCalls.scala index 8f9b067ba..e504047f3 100644 --- a/src/dotty/tools/backend/jvm/CollectSuperCalls.scala +++ b/src/dotty/tools/backend/jvm/CollectSuperCalls.scala @@ -20,8 +20,11 @@ class CollectSuperCalls extends MiniPhaseTransform { override def transformSelect(tree: Select)(implicit ctx: Context, info: TransformerInfo): Tree = { tree.qualifier match { - case Super(qual: This, mix) if mix.nonEmpty => - val classSymbol = qual.symbol.asClass.classSymbol + case Super(qual, mix) if mix.nonEmpty => + val classSymbol: ClassSymbol = qual match { + case qual: This => qual.symbol.asClass.classSymbol + case qual => qual.symbol.info.classSymbol.asClass + } registerSuperCall(classSymbol, tree.symbol.owner.asClass) case _ => } diff --git a/src/dotty/tools/backend/jvm/DottyBackendInterface.scala b/src/dotty/tools/backend/jvm/DottyBackendInterface.scala index 30934605b..34bcd0757 100644 --- a/src/dotty/tools/backend/jvm/DottyBackendInterface.scala +++ b/src/dotty/tools/backend/jvm/DottyBackendInterface.scala @@ -747,9 +747,13 @@ class DottyBackendInterface(outputDirectory: AbstractFile, val superCallsMap: Ma */ def superInterfaces: List[Symbol] = { val directlyInheritedTraits = decorateSymbol(sym).directlyInheritedTraits + val directlyInheritedTraitsSet = directlyInheritedTraits.toSet val allBaseClasses = directlyInheritedTraits.iterator.flatMap(_.symbol.asClass.baseClasses.drop(1)).toSet val superCalls = superCallsMap.getOrElse(sym, Set.empty) - directlyInheritedTraits.filter(t => !allBaseClasses(t) || superCalls(t)) + val additional = (superCalls -- directlyInheritedTraitsSet).filter(_.is(Flags.Trait)) +// if (additional.nonEmpty) +// println(s"$fullName: adding supertraits $additional") + directlyInheritedTraits.filter(t => !allBaseClasses(t) || superCalls(t)) ++ additional } /** |