@@ -398,29 +398,25 @@ object Semantic {
398
398
399
399
/** Error reporting */
400
400
trait Reporter :
401
- def errors : List [Error ]
402
401
def report (err : Error ): Unit
403
402
404
403
object Reporter :
405
- class BufferReporter extends Reporter :
406
- val buf = new mutable.ArrayBuffer [Error ]
404
+ class BufferedReporter extends Reporter :
405
+ private val buf = new mutable.ArrayBuffer [Error ]
407
406
def errors = buf.toList
408
407
def report (err : Error ) = buf += err
409
408
410
409
class ErrorFound (val error : Error ) extends Exception
411
410
class StopEarlyReporter extends Reporter :
412
411
def report (err : Error ) = throw new ErrorFound (err)
413
- def errors = ???
414
-
415
- def fresh (): Reporter = new BufferReporter
416
412
417
413
/** Capture all errors and return as a list */
418
414
def errorsIn (fn : Reporter ?=> Unit ): List [Error ] =
419
- val reporter = Reporter .fresh()
415
+ val reporter = new BufferedReporter
420
416
fn(using reporter)
421
417
reporter.errors.toList
422
418
423
- /** Stop on first found error */
419
+ /** Stop on first error */
424
420
def stopEarly (fn : Reporter ?=> Unit ): List [Error ] =
425
421
val reporter : Reporter = new StopEarlyReporter
426
422
@@ -793,10 +789,9 @@ object Semantic {
793
789
case Hot =>
794
790
val buffer = new mutable.ArrayBuffer [Error ]
795
791
val args2 = args.map { arg =>
796
- given reporter : Reporter = Reporter .fresh()
797
- arg.promote
798
- buffer ++= reporter.errors
799
- if reporter.errors.isEmpty then Hot
792
+ val errors = Reporter .errorsIn { arg.promote }
793
+ buffer ++= errors
794
+ if errors.isEmpty then Hot
800
795
else arg.value.widenArg
801
796
}
802
797
@@ -1053,7 +1048,7 @@ object Semantic {
1053
1048
given Promoted = Promoted .empty
1054
1049
given Trace = Trace .empty
1055
1050
given Env = Env (paramValues)
1056
- given Reporter = Reporter .fresh()
1051
+ given reporter : Reporter . BufferedReporter = new Reporter .BufferedReporter
1057
1052
1058
1053
thisRef.ensureFresh()
1059
1054
log(" checking " + task) { eval(tpl, thisRef, thisRef.klass) }
0 commit comments