diff options
author | Martin Odersky <odersky@gmail.com> | 2014-03-03 17:50:26 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2014-03-03 17:50:26 +0100 |
commit | f3dacf968bc28f5f47612f75562a1a600e511815 (patch) | |
tree | 59f93971f168360b5bbc53a1934535620b6847db /src/dotty/tools/dotc/core/pickling/UnPickler.scala | |
parent | f0d5662e3f8668ed33bc7442951558d861e56073 (diff) | |
download | dotty-f3dacf968bc28f5f47612f75562a1a600e511815.tar.gz dotty-f3dacf968bc28f5f47612f75562a1a600e511815.tar.bz2 dotty-f3dacf968bc28f5f47612f75562a1a600e511815.zip |
Fix of #34
The root cause of #34 was that we took a type argument which was an existential type. These are returned as type bounds, which make no sense in the calling context. To avoid that problem in the future, `typeArgs`
got renamed to `argInfos`, so it is clear we get an info, not necessarily a value type. There are
also added method `argTypes`, `argTypesLo`, `argTypesHi`, which return a type, but either throw an exception or return a lower/upper approximation of the argument is an existential type.
There's another issue that the existential type only arose when compiling the same couple fo files the seciond time. We need to chase that one down separately.
Diffstat (limited to 'src/dotty/tools/dotc/core/pickling/UnPickler.scala')
-rw-r--r-- | src/dotty/tools/dotc/core/pickling/UnPickler.scala | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/dotty/tools/dotc/core/pickling/UnPickler.scala b/src/dotty/tools/dotc/core/pickling/UnPickler.scala index c48e71052..c69f60758 100644 --- a/src/dotty/tools/dotc/core/pickling/UnPickler.scala +++ b/src/dotty/tools/dotc/core/pickling/UnPickler.scala @@ -76,7 +76,7 @@ object UnPickler { case tp @ MethodType(paramNames, paramTypes) => val lastArg = paramTypes.last assert(lastArg isRef defn.ArrayClass) - val elemtp0 :: Nil = lastArg.baseTypeArgs(defn.ArrayClass) + val elemtp0 :: Nil = lastArg.baseArgInfos(defn.ArrayClass) val elemtp = elemtp0 match { case AndType(t1, t2) if t1.typeSymbol.isAbstractType && (t2 isRef defn.ObjectClass) => t1 // drop intersection with Object for abstract types in varargs. UnCurry can handle them. |