@@ -184,6 +184,12 @@ class TypeComparer(@constructorOnly initctx: Context) extends ConstraintHandling
184184 val bounds = gadtBounds(sym)
185185 bounds != null && op(bounds)
186186
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+
187193 protected def isSubType (tp1 : Type , tp2 : Type , a : ApproxState ): Boolean = {
188194 val savedApprox = approx
189195 val savedLeftRoot = leftRoot
@@ -629,12 +635,10 @@ class TypeComparer(@constructorOnly initctx: Context) extends ConstraintHandling
629635 migrateTo3 ||
630636 tp1.typeParams.corresponds(tp2.typeParams)((tparam1, tparam2) =>
631637 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+ }
638642 case _ =>
639643 val tparams1 = tp1.typeParams
640644 if (tparams1.nonEmpty)
@@ -704,9 +708,11 @@ class TypeComparer(@constructorOnly initctx: Context) extends ConstraintHandling
704708 case tp2 : PolyType =>
705709 def comparePoly = tp1 match {
706710 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+ }
710716 case _ => false
711717 }
712718 comparePoly
0 commit comments