aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/core/pickling/UnPickler.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2013-06-12 16:30:49 +0200
committerMartin Odersky <odersky@gmail.com>2013-06-12 16:30:49 +0200
commit27ca695e2726e4f6a9446b5e81b0755dc0fdba9b (patch)
tree9cf5adb1773cac6fc7d20c7708c302b31638e836 /src/dotty/tools/dotc/core/pickling/UnPickler.scala
parent8ad783bf633ba5f913fda84c376dcec9dabd69a9 (diff)
downloaddotty-27ca695e2726e4f6a9446b5e81b0755dc0fdba9b.tar.gz
dotty-27ca695e2726e4f6a9446b5e81b0755dc0fdba9b.tar.bz2
dotty-27ca695e2726e4f6a9446b5e81b0755dc0fdba9b.zip
Made type parameters left leaning for AndTypes.
What did not work before: type F[T] = G[X] & Runnable We now make this work by interpreting type parameters of the RHS to be the type parameters of G[X].
Diffstat (limited to 'src/dotty/tools/dotc/core/pickling/UnPickler.scala')
-rw-r--r--src/dotty/tools/dotc/core/pickling/UnPickler.scala17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/dotty/tools/dotc/core/pickling/UnPickler.scala b/src/dotty/tools/dotc/core/pickling/UnPickler.scala
index f35c24fd7..ea42b40a4 100644
--- a/src/dotty/tools/dotc/core/pickling/UnPickler.scala
+++ b/src/dotty/tools/dotc/core/pickling/UnPickler.scala
@@ -44,8 +44,21 @@ object UnPickler {
*/
def depoly(tp: Type, denot: SymDenotation)(implicit ctx: Context): Type = tp match {
case TempPolyType(tparams, restpe) =>
- if (denot.isAbstractType) restpe.bounds.higherKinded(tparams)
- else PolyType.fromSymbols(tparams, restpe)
+ if (denot.isAbstractType)
+ restpe.bounds.higherKinded(tparams)
+ else if (denot.isAliasType) {
+ var err: Option[(String, Position)] = None
+ val result = restpe.LambdaAbstract(tparams) { (msg, pos) => err = Some((msg, pos)) }
+ for ((msg, pos) <- err)
+ ctx.warning(
+ s"""$msg
+ |originally parsed type : ${tp.show}
+ |will be approximated by: ${result.show}.
+ |Proceed at own risk.""".stripMargin)
+ result
+ }
+ else
+ PolyType.fromSymbols(tparams, restpe)
case tp => tp
}