diff options
author | Martin Odersky <odersky@gmail.com> | 2013-07-22 16:05:38 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2013-07-22 16:05:38 +0200 |
commit | 9169d5ee101ef7d4f6b797e64e06e4e5df2de7e9 (patch) | |
tree | 447b55ceb55ab874d161ed2fefd65a78df7ff8bf /src/dotty/tools/dotc | |
parent | b3d0902d2219f9680180b17ff7f0b22aa11aae90 (diff) | |
download | dotty-9169d5ee101ef7d4f6b797e64e06e4e5df2de7e9.tar.gz dotty-9169d5ee101ef7d4f6b797e64e06e4e5df2de7e9.tar.bz2 dotty-9169d5ee101ef7d4f6b797e64e06e4e5df2de7e9.zip |
Avoid typeArgs when baseType is involved.
Going through baseType.typeArgs does not work, as the baseType is not structurally a type application.
Diffstat (limited to 'src/dotty/tools/dotc')
-rw-r--r-- | src/dotty/tools/dotc/ast/CheckTrees.scala | 2 | ||||
-rw-r--r-- | src/dotty/tools/dotc/core/Types.scala | 4 | ||||
-rw-r--r-- | src/dotty/tools/dotc/core/pickling/UnPickler.scala | 2 |
3 files changed, 4 insertions, 4 deletions
diff --git a/src/dotty/tools/dotc/ast/CheckTrees.scala b/src/dotty/tools/dotc/ast/CheckTrees.scala index 8dbd5a015..502b2eea3 100644 --- a/src/dotty/tools/dotc/ast/CheckTrees.scala +++ b/src/dotty/tools/dotc/ast/CheckTrees.scala @@ -117,7 +117,7 @@ object CheckTrees { check(finalizer.isTerm) check(handler.isTerm) check(handler.tpe derivesFrom defn.FunctionClass(1)) - check(handler.tpe.baseType(defn.FunctionClass(1)).typeArgs.head <:< defn.ThrowableType) + check(handler.tpe.baseTypeArgs(defn.FunctionClass(1)).head <:< defn.ThrowableType) case Throw(expr) => check(expr.isValue) check(expr.tpe.derivesFrom(defn.ThrowableClass)) diff --git a/src/dotty/tools/dotc/core/Types.scala b/src/dotty/tools/dotc/core/Types.scala index af2b694f5..468c5f58a 100644 --- a/src/dotty/tools/dotc/core/Types.scala +++ b/src/dotty/tools/dotc/core/Types.scala @@ -748,14 +748,14 @@ object Types { /** The type arguments of the base type instance wrt `base` of this type */ final def baseTypeArgs(base: Symbol)(implicit ctx: Context): List[Type] = - if (this <:< base.symRef) + if (this derivesFrom base) base.typeParams map (param => member(param.name).info.argType(param)) else Nil /** The first type argument of the base type instance wrt `base` of this type */ final def firstBaseTypeArg(base: Symbol)(implicit ctx: Context): Type = base.typeParams match { - case param :: _ if this <:< base.symRef => + case param :: _ if this derivesFrom base => member(param.name).info.argType(param) case _ => NoType diff --git a/src/dotty/tools/dotc/core/pickling/UnPickler.scala b/src/dotty/tools/dotc/core/pickling/UnPickler.scala index 70798ad8a..133db4268 100644 --- a/src/dotty/tools/dotc/core/pickling/UnPickler.scala +++ b/src/dotty/tools/dotc/core/pickling/UnPickler.scala @@ -69,7 +69,7 @@ object UnPickler { case tp @ MethodType(paramNames, paramTypes) => val lastArg = paramTypes.last assert(lastArg.isArray) - val elemtp0 :: Nil = lastArg.typeArgs + val elemtp0 :: Nil = lastArg.baseTypeArgs(defn.ArrayClass) val elemtp = elemtp0 match { case AndType(t1, t2) if t1.typeSymbol.isAbstractType && t2.isClassType(defn.ObjectClass) => t1 // drop intersection with Object for abstract types in varargs. UnCurry can handle them. |