Skip to content

Commit 838c3de

Browse files
committed
Fixes to TypeLambda and EtaExpansion extractors.
Makes i815 compile.
1 parent a700a12 commit 838c3de

File tree

1 file changed

+13
-5
lines changed

1 file changed

+13
-5
lines changed

src/dotty/tools/dotc/core/TypeApplications.scala

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ object TypeApplications {
6565
val cls = prefix.typeSymbol
6666
val variances = cls.typeParams.map(_.variance)
6767
val argBounds = prefix.argInfos.map(_.bounds)
68-
Some((variances, argBounds, app.refinedInfo))
68+
Some((variances, argBounds, app.refinedInfo.argInfo))
6969
case _ =>
7070
None
7171
}
@@ -91,14 +91,22 @@ object TypeApplications {
9191

9292
def unapply(tp: Type)(implicit ctx: Context): Option[TypeRef] = {
9393
def argsAreForwarders(args: List[Type], n: Int): Boolean = args match {
94-
case TypeRef(RefinedThis(rt), sel) :: args1 =>
95-
rt.eq(tp) && sel == tpnme.hkArg(n) && argsAreForwarders(args1, n - 1)
96-
case nil =>
94+
case Nil =>
9795
n == 0
96+
case TypeRef(RefinedThis(rt), sel) :: args1 =>
97+
rt.eq(tp) && sel == tpnme.hkArg(n - 1) && argsAreForwarders(args1, n - 1)
98+
case _ =>
99+
false
98100
}
99101
tp match {
100102
case TypeLambda(_, argBounds, AppliedType(fn: TypeRef, args))
101-
if argsAreForwarders(args, tp.typeParams.length - 1) => Some(fn)
103+
if argsAreForwarders(args, tp.typeParams.length) => Some(fn)
104+
//case TypeLambda(_, argBounds, AppliedType(fn: TypeRef, args)) =>
105+
// println(i"eta expansion failed because args $args are not forwarders for ${tp.toString}")
106+
// None
107+
//case TypeLambda(_, argBounds, _) =>
108+
// println(i"eta expansion failed because body is not applied type")
109+
// None
102110
case _ => None
103111
}
104112
}

0 commit comments

Comments
 (0)