aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2013-07-22 16:05:38 +0200
committerMartin Odersky <odersky@gmail.com>2013-07-22 16:05:38 +0200
commit9169d5ee101ef7d4f6b797e64e06e4e5df2de7e9 (patch)
tree447b55ceb55ab874d161ed2fefd65a78df7ff8bf
parentb3d0902d2219f9680180b17ff7f0b22aa11aae90 (diff)
downloaddotty-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.
-rw-r--r--src/dotty/tools/dotc/ast/CheckTrees.scala2
-rw-r--r--src/dotty/tools/dotc/core/Types.scala4
-rw-r--r--src/dotty/tools/dotc/core/pickling/UnPickler.scala2
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.