mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-09 21:40:33 +02:00
Improve run-time error reporting in (ice-9 match).
* module/Makefile.am: match.go depends on match.upstream.scm. * module/ice-9/match.scm (error): Accept any number of arguments. * module/ice-9/match.upstream.scm (match-next): Call 'error' in non-tail context, and include the value that failed to match in the call.
This commit is contained in:
parent
b57162c3d2
commit
8d5d0425ce
3 changed files with 7 additions and 3 deletions
|
@ -33,6 +33,7 @@ EXTRA_DIST += ice-9/eval.scm
|
|||
ETAGS_ARGS += ice-9/eval.scm
|
||||
|
||||
ice-9/boot-9.go: ice-9/boot-9.scm ice-9/quasisyntax.scm ice-9/r6rs-libraries.scm
|
||||
ice-9/match.go: ice-9/match.scm ice-9/match.upstream.scm
|
||||
|
||||
# We can compile these in any order, but it's fastest if we compile
|
||||
# psyntax and boot-9 first, then the compiler itself, then the rest of
|
||||
|
|
|
@ -24,9 +24,9 @@
|
|||
match-let*
|
||||
match-letrec))
|
||||
|
||||
(define (error _ msg)
|
||||
(define (error _ . args)
|
||||
;; Error procedure for run-time "no matching pattern" errors.
|
||||
(throw 'match-error "match" msg))
|
||||
(apply throw 'match-error "match" args))
|
||||
|
||||
;; Support for record matching.
|
||||
|
||||
|
|
|
@ -284,7 +284,10 @@
|
|||
(syntax-rules (=>)
|
||||
;; no more clauses, the match failed
|
||||
((match-next v g+s)
|
||||
(error 'match "no matching pattern"))
|
||||
;; Here we wrap error within a double set of parentheses, so that
|
||||
;; the call to 'error' won't be in tail position. This allows the
|
||||
;; backtrace to show the source location of the failing match form.
|
||||
((error 'match "no matching pattern" v)))
|
||||
;; named failure continuation
|
||||
((match-next v g+s (pat (=> failure) . body) . rest)
|
||||
(let ((failure (lambda () (match-next v g+s . rest))))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue