aboutsummaryrefslogtreecommitdiff
path: root/compiler/src/dotty/tools/dotc/core/Types.scala
diff options
context:
space:
mode:
authorNicolas Stucki <nicolas.stucki@gmail.com>2017-03-01 09:35:30 +0100
committerNicolas Stucki <nicolas.stucki@gmail.com>2017-03-01 11:38:19 +0100
commit1a490393d766039332bfccb8b85f264f22c9e9cc (patch)
tree60117a37ae646dacbb3d1050b4d5cb7b137019d3 /compiler/src/dotty/tools/dotc/core/Types.scala
parent83a4f958c3759a7e8b9647ac1fad0654a6e6eb2f (diff)
downloaddotty-1a490393d766039332bfccb8b85f264f22c9e9cc.tar.gz
dotty-1a490393d766039332bfccb8b85f264f22c9e9cc.tar.bz2
dotty-1a490393d766039332bfccb8b85f264f22c9e9cc.zip
Make loop in derivesFrom a tailrec loop.
Diffstat (limited to 'compiler/src/dotty/tools/dotc/core/Types.scala')
-rw-r--r--compiler/src/dotty/tools/dotc/core/Types.scala12
1 files changed, 6 insertions, 6 deletions
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 =>