Skip to content

Commit ebc58f9

Browse files
committed
Implement TypeComparer.explaining
Like TypeComparer.explained, but instead of just returning the trace, returns the result, still allowing the trace to be accessed via .lastTrace, as exemplified by implementing TypeComparer.explained in terms of TypeComparer.explaining.
1 parent 9d2deb9 commit ebc58f9

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

compiler/src/dotty/tools/dotc/core/TypeComparer.scala

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3268,9 +3268,10 @@ class TypeComparer(@constructorOnly initctx: Context) extends ConstraintHandling
32683268

32693269
/** The trace of comparison operations when performing `op` */
32703270
def explained[T](op: ExplainingTypeComparer => T, header: String = "Subtype trace:", short: Boolean)(using Context): String =
3271-
val cmp = explainingTypeComparer(short)
3272-
inSubComparer(cmp)(op)
3273-
cmp.lastTrace(header)
3271+
explaining(cmp => { op(cmp); cmp.lastTrace(header) }, short)
3272+
3273+
def explaining[T](op: ExplainingTypeComparer => T, short: Boolean)(using Context): T =
3274+
inSubComparer(explainingTypeComparer(short))(op)
32743275

32753276
def reduceMatchWith[T](op: MatchReducer => T)(using Context): T =
32763277
inSubComparer(matchReducer)(op)
@@ -3440,6 +3441,9 @@ object TypeComparer {
34403441
def explained[T](op: ExplainingTypeComparer => T, header: String = "Subtype trace:", short: Boolean = false)(using Context): String =
34413442
comparing(_.explained(op, header, short))
34423443

3444+
def explaining[T](op: ExplainingTypeComparer => T, short: Boolean = false)(using Context): T =
3445+
comparing(_.explaining(op, short))
3446+
34433447
def reduceMatchWith[T](op: MatchReducer => T)(using Context): T =
34443448
comparing(_.reduceMatchWith(op))
34453449

@@ -3873,7 +3877,7 @@ class ExplainingTypeComparer(initctx: Context, short: Boolean) extends TypeCompa
38733877
override def recur(tp1: Type, tp2: Type): Boolean =
38743878
def moreInfo =
38753879
if Config.verboseExplainSubtype || ctx.settings.verbose.value
3876-
then s" ${tp1.getClass} ${tp2.getClass}"
3880+
then s" ${tp1.className} ${tp2.className}"
38773881
else ""
38783882
val approx = approxState
38793883
def approxStr = if short then "" else approx.show

0 commit comments

Comments
 (0)