From 1a490393d766039332bfccb8b85f264f22c9e9cc Mon Sep 17 00:00:00 2001 From: Nicolas Stucki Date: Wed, 1 Mar 2017 09:35:30 +0100 Subject: Make loop in derivesFrom a tailrec loop. --- compiler/src/dotty/tools/dotc/core/Types.scala | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'compiler/src/dotty/tools/dotc/core/Types.scala') diff --git a/compiler/src/dotty/tools/dotc/core/Types.scala b/compiler/src/dotty/tools/dotc/core/Types.scala index 200e94a1e..3258a1d57 100644 --- a/compiler/src/dotty/tools/dotc/core/Types.scala +++ b/compiler/src/dotty/tools/dotc/core/Types.scala @@ -153,16 +153,16 @@ object Types { /** Is this type an instance of a non-bottom subclass of the given class `cls`? */ final def derivesFrom(cls: Symbol)(implicit ctx: Context): Boolean = { - def loop(tp: Type) = tp match { + def loop(tp: Type): Boolean = tp match { case tp: TypeRef => val sym = tp.symbol - if (sym.isClass) sym.derivesFrom(cls) else tp.superType.derivesFrom(cls) + if (sym.isClass) sym.derivesFrom(cls) else loop(tp.superType): @tailrec case tp: TypeProxy => - tp.underlying.derivesFrom(cls) + loop(tp.underlying): @tailrec case tp: AndType => - tp.tp1.derivesFrom(cls) || tp.tp2.derivesFrom(cls) + loop(tp.tp1) || loop(tp.tp2): @tailrec case tp: OrType => - tp.tp1.derivesFrom(cls) && tp.tp2.derivesFrom(cls) + loop(tp.tp1) && loop(tp.tp2): @tailrec case tp: JavaArrayType => cls == defn.ObjectClass case _ => @@ -1011,7 +1011,7 @@ object Types { } else NoType case SkolemType(tp) => - tp.lookupRefined(name) + loop(tp) case pre: WildcardType => WildcardType case pre: TypeRef => -- cgit v1.2.3