@@ -397,19 +397,8 @@ object TreeChecker {
397397            promote(tree)
398398          case  _ => 
399399            val  tree1  =  super .typedUnadapted(tree, pt, locked)
400-             def  isSubType (tp1 : Type , tp2 : Type ) = 
401-               (tp1 eq tp2) ||  //  accept NoType / NoType
402-               (tp1 <:<  tp2)
403-             def  divergenceMsg (tp1 : Type , tp2 : Type ) = 
404-               s """ Types differ 
405-                 |Original type :  ${tree.typeOpt.show}
406-                 |After checking:  ${tree1.tpe.show}
407-                 |Original tree :  ${tree.show}
408-                 |After checking:  ${tree1.show}
409-                 |Why different : 
410-                """ .stripMargin +  core.TypeComparer .explained(_.isSubType(tp1, tp2))
411-             if  (tree.hasType) //  it might not be typed because Typer sometimes constructs new untyped trees and resubmits them to typedUnadapted
412-               assert(isSubType(tree1.tpe, tree.typeOpt), divergenceMsg(tree1.tpe, tree.typeOpt))
400+             if  tree.hasType then  //  it might not be typed because Typer sometimes constructs new untyped trees and resubmits them to typedUnadapted
401+               checkType(tree1.tpe, tree.typeOpt, tree, " typedUnadapted" 
413402            tree1
414403        checkNoOrphans(res.tpe)
415404        phasesToCheck.foreach(_.checkPostCondition(res))
@@ -747,28 +736,25 @@ object TreeChecker {
747736    override  def  adapt (tree : Tree , pt : Type , locked : TypeVars )(using  Context ):  Tree  =  {
748737      def  isPrimaryConstructorReturn  = 
749738        ctx.owner.isPrimaryConstructor &&  pt.isRef(ctx.owner.owner) &&  tree.tpe.isRef(defn.UnitClass )
750-       def  infoStr (tp : Type ) =  tp match  {
751-         case  tp : TypeRef  => 
752-           val  sym  =  tp.symbol
753-           i " ${sym.showLocated} with  ${tp.designator}, flags =  ${sym.flagsString}, underlying =  ${tp.underlyingIterator.toList}%, % " 
754-         case  _ => 
755-           " ??" 
756-       }
757-       if  (ctx.mode.isExpr && 
758-           ! tree.isEmpty && 
759-           ! isPrimaryConstructorReturn && 
760-           ! pt.isInstanceOf [FunOrPolyProto ])
761-         assert(tree.tpe <:<  pt, {
762-           val  mismatch  =  TypeMismatch (tree.tpe, pt, Some (tree))
763-           i """ | ${mismatch.msg}
764-               |found:  ${infoStr(tree.tpe)}
765-               |expected:  ${infoStr(pt)}
766-               |tree =  $tree""" .stripMargin
767-         })
739+       if  ctx.mode.isExpr
740+         &&  ! tree.isEmpty
741+         &&  ! isPrimaryConstructorReturn
742+         &&  ! pt.isInstanceOf [FunOrPolyProto ]
743+       then 
744+         checkType(tree.tpe, pt, tree, " adapt" 
768745      tree
769746    }
770747
771748    override  def  simplify (tree : Tree , pt : Type , locked : TypeVars )(using  Context ):  tree.type  =  tree
749+ 
750+     private  def  checkType (tp1 : Type , tp2 : Type , tree : untpd.Tree , step : String )(using  Context ) = 
751+       //  Accept NoType <:< NoType as true
752+       assert((tp1 eq tp2) ||  (tp1 <:<  tp2), {
753+         val  mismatch  =  TypeMismatch (tp1, tp2, None )
754+         i """ |Type Mismatch (while checking  $step): 
755+             | ${mismatch.message}${mismatch.explanation}
756+             |tree =  $tree  ${tree.className}""" .stripMargin
757+       })
772758  }
773759
774760  /**  Tree checker that can be applied to a local tree. */  
0 commit comments