@@ -423,6 +423,7 @@ object Semantic {
423
423
/** Error reporting */
424
424
trait Reporter :
425
425
def report (err : Error ): Unit
426
+ def reportAll (errs : Seq [Error ]): Unit = for err <- errs do report(err)
426
427
427
428
object Reporter :
428
429
class BufferedReporter extends Reporter :
@@ -600,7 +601,7 @@ object Semantic {
600
601
}
601
602
602
603
def call (meth : Symbol , args : List [ArgInfo ], receiver : Type , superType : Type , needResolve : Boolean = true ): Contextual [Value ] = log(" call " + meth.show + " , args = " + args, printer, (_ : Value ).show) {
603
- def checkArgs = args.foreach(_.promote)
604
+ def promoteArgs () : Contextual [ Unit ] = args.foreach(_.promote)
604
605
605
606
def isSyntheticApply (meth : Symbol ) =
606
607
meth.is(Flags .Synthetic )
@@ -648,16 +649,16 @@ object Semantic {
648
649
if allArgsPromote then
649
650
Hot : Value
650
651
else if errors.nonEmpty then
651
- for error <- errors do reporter.report(error )
652
+ reporter.reportAll(errors )
652
653
Hot : Value
653
654
else
654
655
Cold : Value
655
656
else
656
- checkArgs
657
+ promoteArgs()
657
658
Hot
658
659
659
660
case Cold =>
660
- checkArgs
661
+ promoteArgs()
661
662
val error = CallCold (meth, trace.toVector)
662
663
reporter.report(error)
663
664
Hot
@@ -676,15 +677,15 @@ object Semantic {
676
677
if target.hasSource then
677
678
val cls = target.owner.enclosingClass.asClass
678
679
val ddef = target.defTree.asInstanceOf [DefDef ]
679
- val argErrors = Reporter .errorsIn { args.foreach(_.promote ) }
680
+ val argErrors = Reporter .errorsIn { promoteArgs( ) }
680
681
// normal method call
681
682
if argErrors.nonEmpty && isSyntheticApply(meth) then
682
683
val klass = meth.owner.companionClass.asClass
683
684
val outerCls = klass.owner.lexicallyEnclosingClass.asClass
684
685
val outer = resolveOuterSelect(outerCls, ref, 1 )
685
686
outer.instantiate(klass, klass.primaryConstructor, args)
686
687
else
687
- for error <- argErrors do reporter.report(error )
688
+ reporter.reportAll(argErrors )
688
689
withEnv(if isLocal then env else Env .empty) {
689
690
extendTrace(ddef) {
690
691
eval(ddef.rhs, ref, cls, cacheResult = true )
@@ -694,7 +695,7 @@ object Semantic {
694
695
Hot
695
696
else
696
697
// no source code available
697
- checkArgs
698
+ promoteArgs()
698
699
val error = CallUnknown (target, trace.toVector)
699
700
reporter.report(error)
700
701
Hot
@@ -710,7 +711,7 @@ object Semantic {
710
711
// meth == NoSymbol for poly functions
711
712
if meth.name.toString == " tupled" then value // a call like `fun.tupled`
712
713
else
713
- checkArgs
714
+ promoteArgs()
714
715
withEnv(env) {
715
716
eval(body, thisV, klass, cacheResult = true )
716
717
}
@@ -932,7 +933,7 @@ object Semantic {
932
933
promoted.add(warm)
933
934
val errors = warm.tryPromote(msg)
934
935
if errors.nonEmpty then promoted.remove(warm)
935
- for error <- errors do reporter.report(error )
936
+ reporter.reportAll(errors )
936
937
937
938
case fun @ Fun (body, thisV, klass, env) =>
938
939
if ! promoted.contains(fun) then
0 commit comments