Skip to content

Commit

Permalink
Merge pull request #15819 from dwijnand/trace-gadtAddBounds
Browse files Browse the repository at this point in the history
Add gadtAddBound to ExplainingTypeComparer tracing
  • Loading branch information
odersky authored Aug 18, 2022
2 parents 30b41c1 + ee874dd commit 6234966
Showing 1 changed file with 9 additions and 11 deletions.
20 changes: 9 additions & 11 deletions compiler/src/dotty/tools/dotc/core/TypeComparer.scala
Original file line number Diff line number Diff line change
Expand Up @@ -117,8 +117,7 @@ class TypeComparer(@constructorOnly initctx: Context) extends ConstraintHandling
private def isBottom(tp: Type) = tp.widen.isRef(NothingClass)

protected def gadtBounds(sym: Symbol)(using Context) = ctx.gadt.bounds(sym)
protected def gadtAddLowerBound(sym: Symbol, b: Type): Boolean = ctx.gadt.addBound(sym, b, isUpper = false)
protected def gadtAddUpperBound(sym: Symbol, b: Type): Boolean = ctx.gadt.addBound(sym, b, isUpper = true)
protected def gadtAddBound(sym: Symbol, b: Type, isUpper: Boolean): Boolean = ctx.gadt.addBound(sym, b, isUpper)

protected def typeVarInstance(tvar: TypeVar)(using Context): Type = tvar.underlying

Expand Down Expand Up @@ -1955,7 +1954,7 @@ class TypeComparer(@constructorOnly initctx: Context) extends ConstraintHandling
if (bound.isRef(tparam)) false
else
val savedGadt = ctx.gadt.fresh
val success = if isUpper then gadtAddUpperBound(tparam, bound) else gadtAddLowerBound(tparam, bound)
val success = gadtAddBound(tparam, bound, isUpper)
if !success then ctx.gadt.restore(savedGadt)
success
}
Expand Down Expand Up @@ -2938,15 +2937,9 @@ class TrackingTypeComparer(initctx: Context) extends TypeComparer(initctx) {
super.gadtBounds(sym)
}

override def gadtAddLowerBound(sym: Symbol, b: Type): Boolean = {
override def gadtAddBound(sym: Symbol, b: Type, isUpper: Boolean): Boolean =
if (sym.exists) footprint += sym.typeRef
super.gadtAddLowerBound(sym, b)
}

override def gadtAddUpperBound(sym: Symbol, b: Type): Boolean = {
if (sym.exists) footprint += sym.typeRef
super.gadtAddUpperBound(sym, b)
}
super.gadtAddBound(sym, b, isUpper)

override def typeVarInstance(tvar: TypeVar)(using Context): Type = {
footprint += tvar
Expand Down Expand Up @@ -3126,5 +3119,10 @@ class ExplainingTypeComparer(initctx: Context) extends TypeComparer(initctx) {
super.addConstraint(param, bound, fromBelow)
}

override def gadtAddBound(sym: Symbol, b: Type, isUpper: Boolean): Boolean =
traceIndented(s"add GADT constraint ${show(sym)} ${if isUpper then "<:" else ">:"} ${show(b)} $frozenNotice, GADT constraint = ${show(ctx.gadt.debugBoundsDescription)}") {
super.gadtAddBound(sym, b, isUpper)
}

def lastTrace(header: String): String = header + { try b.toString finally b.clear() }
}

0 comments on commit 6234966

Please sign in to comment.