aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/core/TypeApplications.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2015-12-03 16:41:34 +0100
committerMartin Odersky <odersky@gmail.com>2015-12-06 16:09:22 +0100
commit1fe3310c2008a29f9e3cf9e067005bf52527a0d3 (patch)
treeeb87cf5fecf438583fa1147325b9f92ef6fc48ff /src/dotty/tools/dotc/core/TypeApplications.scala
parent130c24c233e0b2b41be8e11ece1bd4cd6ebff00f (diff)
downloaddotty-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.scala18
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
}
}