diff options
author | Martin Odersky <odersky@gmail.com> | 2015-12-03 16:41:34 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2015-12-06 16:09:22 +0100 |
commit | 1fe3310c2008a29f9e3cf9e067005bf52527a0d3 (patch) | |
tree | eb87cf5fecf438583fa1147325b9f92ef6fc48ff /src/dotty/tools/dotc/core/TypeApplications.scala | |
parent | 130c24c233e0b2b41be8e11ece1bd4cd6ebff00f (diff) | |
download | dotty-1fe3310c2008a29f9e3cf9e067005bf52527a0d3.tar.gz dotty-1fe3310c2008a29f9e3cf9e067005bf52527a0d3.tar.bz2 dotty-1fe3310c2008a29f9e3cf9e067005bf52527a0d3.zip |
Fixes to TypeLambda and EtaExpansion extractors.
Makes i815 compile.
Diffstat (limited to 'src/dotty/tools/dotc/core/TypeApplications.scala')
-rw-r--r-- | src/dotty/tools/dotc/core/TypeApplications.scala | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/dotty/tools/dotc/core/TypeApplications.scala b/src/dotty/tools/dotc/core/TypeApplications.scala index d45e11d59..4c9746c39 100644 --- a/src/dotty/tools/dotc/core/TypeApplications.scala +++ b/src/dotty/tools/dotc/core/TypeApplications.scala @@ -65,7 +65,7 @@ object TypeApplications { val cls = prefix.typeSymbol val variances = cls.typeParams.map(_.variance) val argBounds = prefix.argInfos.map(_.bounds) - Some((variances, argBounds, app.refinedInfo)) + Some((variances, argBounds, app.refinedInfo.argInfo)) case _ => None } @@ -91,14 +91,22 @@ object TypeApplications { def unapply(tp: Type)(implicit ctx: Context): Option[TypeRef] = { def argsAreForwarders(args: List[Type], n: Int): Boolean = args match { - case TypeRef(RefinedThis(rt), sel) :: args1 => - rt.eq(tp) && sel == tpnme.hkArg(n) && argsAreForwarders(args1, n - 1) - case nil => + case Nil => n == 0 + case TypeRef(RefinedThis(rt), sel) :: args1 => + rt.eq(tp) && sel == tpnme.hkArg(n - 1) && argsAreForwarders(args1, n - 1) + case _ => + false } tp match { case TypeLambda(_, argBounds, AppliedType(fn: TypeRef, args)) - if argsAreForwarders(args, tp.typeParams.length - 1) => Some(fn) + if argsAreForwarders(args, tp.typeParams.length) => Some(fn) + //case TypeLambda(_, argBounds, AppliedType(fn: TypeRef, args)) => + // println(i"eta expansion failed because args $args are not forwarders for ${tp.toString}") + // None + //case TypeLambda(_, argBounds, _) => + // println(i"eta expansion failed because body is not applied type") + // None case _ => None } } |