@@ -184,6 +184,12 @@ class TypeComparer(@constructorOnly initctx: Context) extends ConstraintHandling
184
184
val bounds = gadtBounds(sym)
185
185
bounds != null && op(bounds)
186
186
187
+ private inline def comparingTypeLambdas (tl1 : TypeLambda , tl2 : TypeLambda )(op : => Boolean ): Boolean =
188
+ val saved = comparedTypeLambdas
189
+ comparedTypeLambdas += tl1
190
+ comparedTypeLambdas += tl2
191
+ try op finally comparedTypeLambdas = saved
192
+
187
193
protected def isSubType (tp1 : Type , tp2 : Type , a : ApproxState ): Boolean = {
188
194
val savedApprox = approx
189
195
val savedLeftRoot = leftRoot
@@ -629,12 +635,10 @@ class TypeComparer(@constructorOnly initctx: Context) extends ConstraintHandling
629
635
migrateTo3 ||
630
636
tp1.typeParams.corresponds(tp2.typeParams)((tparam1, tparam2) =>
631
637
isSubType(tparam2.paramInfo.subst(tp2, tp1), tparam1.paramInfo))
632
- val saved = comparedTypeLambdas
633
- comparedTypeLambdas += tp1
634
- comparedTypeLambdas += tp2
635
- val variancesOK = variancesConform(tp1.typeParams, tp2.typeParams)
636
- try variancesOK && boundsOK && isSubType(tp1.resType, tp2.resType.subst(tp2, tp1))
637
- finally comparedTypeLambdas = saved
638
+ comparingTypeLambdas(tp1, tp2) {
639
+ val variancesOK = variancesConform(tp1.typeParams, tp2.typeParams)
640
+ variancesOK && boundsOK && isSubType(tp1.resType, tp2.resType.subst(tp2, tp1))
641
+ }
638
642
case _ =>
639
643
val tparams1 = tp1.typeParams
640
644
if (tparams1.nonEmpty)
@@ -704,9 +708,11 @@ class TypeComparer(@constructorOnly initctx: Context) extends ConstraintHandling
704
708
case tp2 : PolyType =>
705
709
def comparePoly = tp1 match {
706
710
case tp1 : PolyType =>
707
- (tp1.signature consistentParams tp2.signature) &&
708
- matchingPolyParams(tp1, tp2) &&
709
- isSubType(tp1.resultType, tp2.resultType.subst(tp2, tp1))
711
+ comparingTypeLambdas(tp1, tp2) {
712
+ (tp1.signature consistentParams tp2.signature)
713
+ && matchingPolyParams(tp1, tp2)
714
+ && isSubType(tp1.resultType, tp2.resultType.subst(tp2, tp1))
715
+ }
710
716
case _ => false
711
717
}
712
718
comparePoly
0 commit comments