diff options
author | Martin Odersky <odersky@gmail.com> | 2014-06-20 14:52:36 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2014-06-20 14:52:36 +0200 |
commit | ad0600fbfaf0c9993f993b8577c82ba447baea26 (patch) | |
tree | b9127a20149a5df61b5caff182935459a9c185f1 /src/dotty/tools/dotc | |
parent | 91e44df57185a32988c22823551d8049b3c43da8 (diff) | |
download | dotty-ad0600fbfaf0c9993f993b8577c82ba447baea26.tar.gz dotty-ad0600fbfaf0c9993f993b8577c82ba447baea26.tar.bz2 dotty-ad0600fbfaf0c9993f993b8577c82ba447baea26.zip |
Add missing case where isHKSubType is needed
Was not called when comparing a named type with an #Apply projection. The commit fixes this.
Diffstat (limited to 'src/dotty/tools/dotc')
-rw-r--r-- | src/dotty/tools/dotc/core/TypeComparer.scala | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/dotty/tools/dotc/core/TypeComparer.scala b/src/dotty/tools/dotc/core/TypeComparer.scala index c3a4fa981..1e1d02be2 100644 --- a/src/dotty/tools/dotc/core/TypeComparer.scala +++ b/src/dotty/tools/dotc/core/TypeComparer.scala @@ -450,9 +450,10 @@ class TypeComparer(initctx: Context) extends DotClass { } case _ => false } - def isHKSubType = { + def isHKSubType = tp2.name == tpnme.Apply && { val lambda2 = tp2.prefix.LambdaClass(forcing = true) - lambda2.exists && isSubType(tp1.EtaLiftTo(lambda2.typeParams), tp2.prefix) + lambda2.exists && !tp1.isLambda && + isSubType(tp1.EtaLiftTo(lambda2.typeParams), tp2.prefix) } def compareNamed = { implicit val ctx: Context = this.ctx // Dotty deviation: implicits need explicit type @@ -479,11 +480,11 @@ class TypeComparer(initctx: Context) extends DotClass { } ) else (tp1.name eq tp2.name) && isSameType(tp1.prefix, tp2.prefix) - ) || secondTryNamed(tp1, tp2) + ) || isHKSubType || secondTryNamed(tp1, tp2) case ThisType(cls) if cls eq tp2.symbol.moduleClass => isSubType(cls.owner.thisType, tp2.prefix) case _ => - tp2.name == tpnme.Apply && isHKSubType || secondTry(tp1, tp2) + isHKSubType || secondTry(tp1, tp2) } } compareNamed |