- (multiple-value-bind (,value ,winp ,consumedp) (parse ,parser)
- (declare (ignore ,consumedp))
+ (multiple-value-bind (,value ,nerror ,nwarn)
+ (flet ((,body ()
+ (setf ,char-scanner (make-string-scanner ,input)
+ ,scanner (make-instance
+ 'sod-token-scanner
+ :char-scanner ,char-scanner))
+ (multiple-value-bind (,value ,winp ,consumedp)
+ (parse ,parser)
+ (declare (ignore ,consumedp))
+ (cond (,winp ,value)
+ (t (syntax-error ,scanner ,value)
+ nil)))))
+ (if ,backtrace (,body)
+ (count-and-report-errors ()
+ (with-default-error-location (,scanner)
+ (,body)))))