@@ -3054,7 +3054,7 @@ class TypeComparer(@constructorOnly initctx: Context) extends ConstraintHandling
3054
3054
end provablyDisjointTypeArgs
3055
3055
3056
3056
protected def explainingTypeComparer (short : Boolean ) = ExplainingTypeComparer (comparerContext, short)
3057
- protected def trackingTypeComparer = TrackingTypeComparer (comparerContext)
3057
+ protected def matchReducer = MatchReducer (comparerContext)
3058
3058
3059
3059
private def inSubComparer [T , Cmp <: TypeComparer ](comparer : Cmp )(op : Cmp => T ): T =
3060
3060
val saved = myInstance
@@ -3068,8 +3068,8 @@ class TypeComparer(@constructorOnly initctx: Context) extends ConstraintHandling
3068
3068
inSubComparer(cmp)(op)
3069
3069
cmp.lastTrace(header)
3070
3070
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)
3073
3073
}
3074
3074
3075
3075
object TypeComparer {
@@ -3236,14 +3236,14 @@ object TypeComparer {
3236
3236
def explained [T ](op : ExplainingTypeComparer => T , header : String = " Subtype trace:" , short : Boolean = false )(using Context ): String =
3237
3237
comparing(_.explained(op, header, short))
3238
3238
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))
3241
3241
3242
3242
def subCaptures (refs1 : CaptureSet , refs2 : CaptureSet , frozen : Boolean )(using Context ): CaptureSet .CompareResult =
3243
3243
comparing(_.subCaptures(refs1, refs2, frozen))
3244
3244
}
3245
3245
3246
- object TrackingTypeComparer :
3246
+ object MatchReducer :
3247
3247
import printing .* , Texts .*
3248
3248
enum MatchResult extends Showable :
3249
3249
case Reduced (tp : Type )
@@ -3259,38 +3259,16 @@ object TrackingTypeComparer:
3259
3259
case Stuck => " Stuck"
3260
3260
case NoInstance (fails) => " NoInstance(" ~ Text (fails.map(p.toText(_) ~ p.toText(_)), " , " ) ~ " )"
3261
3261
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 .*
3264
3268
3265
3269
init(initctx)
3266
3270
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
3294
3272
3295
3273
def matchCases (scrut : Type , cases : List [MatchTypeCaseSpec ])(using Context ): Type = {
3296
3274
// a reference for the type parameters poisoned during matching
0 commit comments