@@ -3054,7 +3054,7 @@ class TypeComparer(@constructorOnly initctx: Context) extends ConstraintHandling
30543054 end provablyDisjointTypeArgs
30553055
30563056 protected def explainingTypeComparer (short : Boolean ) = ExplainingTypeComparer (comparerContext, short)
3057- protected def trackingTypeComparer = TrackingTypeComparer (comparerContext)
3057+ protected def matchReducer = MatchReducer (comparerContext)
30583058
30593059 private def inSubComparer [T , Cmp <: TypeComparer ](comparer : Cmp )(op : Cmp => T ): T =
30603060 val saved = myInstance
@@ -3068,8 +3068,8 @@ class TypeComparer(@constructorOnly initctx: Context) extends ConstraintHandling
30683068 inSubComparer(cmp)(op)
30693069 cmp.lastTrace(header)
30703070
3071- def tracked [T ](op : TrackingTypeComparer => T )(using Context ): T =
3072- inSubComparer(trackingTypeComparer )(op)
3071+ def reduceMatchWith [T ](op : MatchReducer => T )(using Context ): T =
3072+ inSubComparer(matchReducer )(op)
30733073}
30743074
30753075object TypeComparer {
@@ -3236,14 +3236,14 @@ object TypeComparer {
32363236 def explained [T ](op : ExplainingTypeComparer => T , header : String = " Subtype trace:" , short : Boolean = false )(using Context ): String =
32373237 comparing(_.explained(op, header, short))
32383238
3239- def tracked [T ](op : TrackingTypeComparer => T )(using Context ): T =
3240- comparing(_.tracked (op))
3239+ def reduceMatchWith [T ](op : MatchReducer => T )(using Context ): T =
3240+ comparing(_.reduceMatchWith (op))
32413241
32423242 def subCaptures (refs1 : CaptureSet , refs2 : CaptureSet , frozen : Boolean )(using Context ): CaptureSet .CompareResult =
32433243 comparing(_.subCaptures(refs1, refs2, frozen))
32443244}
32453245
3246- object TrackingTypeComparer :
3246+ object MatchReducer :
32473247 import printing .* , Texts .*
32483248 enum MatchResult extends Showable :
32493249 case Reduced (tp : Type )
@@ -3259,38 +3259,16 @@ object TrackingTypeComparer:
32593259 case Stuck => " Stuck"
32603260 case NoInstance (fails) => " NoInstance(" ~ Text (fails.map(p.toText(_) ~ p.toText(_)), " , " ) ~ " )"
32613261
3262- class TrackingTypeComparer (initctx : Context ) extends TypeComparer (initctx) {
3263- import TrackingTypeComparer .*
3262+ /** A type comparer for reducing match types.
3263+ * TODO: Not sure this needs to be a type comparer. Can we make it a
3264+ * separate class?
3265+ */
3266+ class MatchReducer (initctx : Context ) extends TypeComparer (initctx) {
3267+ import MatchReducer .*
32643268
32653269 init(initctx)
32663270
3267- override def trackingTypeComparer = this
3268-
3269- val footprint : mutable.Set [Type ] = mutable.Set [Type ]()
3270-
3271- override def bounds (param : TypeParamRef )(using Context ): TypeBounds = {
3272- if (param.binder `ne` caseLambda) footprint += param
3273- super .bounds(param)
3274- }
3275-
3276- override def addOneBound (param : TypeParamRef , bound : Type , isUpper : Boolean )(using Context ): Boolean = {
3277- if (param.binder `ne` caseLambda) footprint += param
3278- super .addOneBound(param, bound, isUpper)
3279- }
3280-
3281- override def gadtBounds (sym : Symbol )(using Context ): TypeBounds | Null = {
3282- if (sym.exists) footprint += sym.typeRef
3283- super .gadtBounds(sym)
3284- }
3285-
3286- override def gadtAddBound (sym : Symbol , b : Type , isUpper : Boolean ): Boolean =
3287- if (sym.exists) footprint += sym.typeRef
3288- super .gadtAddBound(sym, b, isUpper)
3289-
3290- override def typeVarInstance (tvar : TypeVar )(using Context ): Type = {
3291- footprint += tvar
3292- super .typeVarInstance(tvar)
3293- }
3271+ override def matchReducer = this
32943272
32953273 def matchCases (scrut : Type , cases : List [MatchTypeCaseSpec ])(using Context ): Type = {
32963274 // a reference for the type parameters poisoned during matching
0 commit comments