diff options
Diffstat (limited to 'compiler/src/dotty/tools/dotc/core/TypeErasure.scala')
-rw-r--r-- | compiler/src/dotty/tools/dotc/core/TypeErasure.scala | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/compiler/src/dotty/tools/dotc/core/TypeErasure.scala b/compiler/src/dotty/tools/dotc/core/TypeErasure.scala index ff99008bb..2140405b1 100644 --- a/compiler/src/dotty/tools/dotc/core/TypeErasure.scala +++ b/compiler/src/dotty/tools/dotc/core/TypeErasure.scala @@ -246,10 +246,14 @@ object TypeErasure { val cls2 = tp2.classSymbol def loop(bcs: List[ClassSymbol], bestSoFar: ClassSymbol): ClassSymbol = bcs match { case bc :: bcs1 => - if (cls2.derivesFrom(bc)) - if (!bc.is(Trait) && bc != defn.AnyClass) bc - else loop(bcs1, if (bestSoFar.derivesFrom(bc)) bestSoFar else bc) - else + if (cls2.derivesFrom(bc)) { + val newBest = if (bestSoFar.derivesFrom(bc)) bestSoFar else bc + + if (!bc.is(Trait) && bc != defn.AnyClass) + newBest + else + loop(bcs1, newBest) + } else loop(bcs1, bestSoFar) case nil => bestSoFar |