aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2015-04-06 13:26:07 +0200
committerMartin Odersky <odersky@gmail.com>2015-04-07 23:53:59 +0200
commit3b53a8300f09c11a9fc889dbe59061a6941d21cc (patch)
treec77b258f5195c95f0dc7f335666677b935edcd33 /src
parent26881a91ca838708329f6ebdb82b603823a0ad25 (diff)
downloaddotty-3b53a8300f09c11a9fc889dbe59061a6941d21cc.tar.gz
dotty-3b53a8300f09c11a9fc889dbe59061a6941d21cc.tar.bz2
dotty-3b53a8300f09c11a9fc889dbe59061a6941d21cc.zip
Homogenize #Apply projections.
Simplify fully applied #Apply projections before comparing trees. Such projections are now (correctly) simplified on unpickling but persist in the original tree before pickling. The discrepancy was uncovered by the last commit.
Diffstat (limited to 'src')
-rw-r--r--src/dotty/tools/dotc/core/TypeApplications.scala11
-rw-r--r--src/dotty/tools/dotc/printing/PlainPrinter.scala4
2 files changed, 14 insertions, 1 deletions
diff --git a/src/dotty/tools/dotc/core/TypeApplications.scala b/src/dotty/tools/dotc/core/TypeApplications.scala
index 02526a30b..6c3fef1a9 100644
--- a/src/dotty/tools/dotc/core/TypeApplications.scala
+++ b/src/dotty/tools/dotc/core/TypeApplications.scala
@@ -191,6 +191,17 @@ class TypeApplications(val self: Type) extends AnyVal {
if (res.isInstantiatedLambda) res.select(tpnme.Apply) else res
}
}
+
+ /** Simplify a fully instantiated type of the form `LambdaX{... type Apply = T } # Apply` to `T`.
+ */
+ def simplifyApply(implicit ctx: Context): Type = self match {
+ case self @ TypeRef(prefix, tpnme.Apply) if prefix.isInstantiatedLambda =>
+ prefix.member(tpnme.Apply).info match {
+ case TypeAlias(alias) => alias
+ case _ => self
+ }
+ case _ => self
+ }
final def appliedTo(arg: Type)(implicit ctx: Context): Type = appliedTo(arg :: Nil)
final def appliedTo(arg1: Type, arg2: Type)(implicit ctx: Context): Type = appliedTo(arg1 :: arg2 :: Nil)
diff --git a/src/dotty/tools/dotc/printing/PlainPrinter.scala b/src/dotty/tools/dotc/printing/PlainPrinter.scala
index 8669db9a0..ce33132ab 100644
--- a/src/dotty/tools/dotc/printing/PlainPrinter.scala
+++ b/src/dotty/tools/dotc/printing/PlainPrinter.scala
@@ -43,7 +43,9 @@ class PlainPrinter(_ctx: Context) extends Printer {
case tp: TypeVar if tp.isInstantiated => homogenize(tp.instanceOpt)
case AndType(tp1, tp2) => homogenize(tp1) & homogenize(tp2)
case OrType(tp1, tp2) => homogenize(tp1) | homogenize(tp2)
- case _ => tp
+ case _ =>
+ val tp1 = tp.simplifyApply
+ if (tp1 eq tp) tp else homogenize(tp1)
}
else tp