diff options
Diffstat (limited to 'stdlib/match.tl')
-rw-r--r-- | stdlib/match.tl | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/stdlib/match.tl b/stdlib/match.tl index 8d014f11..a38798d6 100644 --- a/stdlib/match.tl +++ b/stdlib/match.tl @@ -1070,8 +1070,11 @@ (eql 2 (length pair))) (compile-error f "invalid pattern-sequence pair ~s" pair))) (let* ((pats [mapcar car pat-seq-pairs]) - (seqs [mapcar cadr pat-seq-pairs])) - ^(,fun (lambda-match ((,*pats) (progn ,*body))) ,*seqs)))) + (seqs [mapcar cadr pat-seq-pairs]) + (gens [mapcar (ret (gensym)) pat-seq-pairs])) + ^(let ,(zip gens seqs) + (block nil + (,fun (lambda-match ((,*pats) (progn ,*body))) ,*gens)))))) (defmacro each-match (:form f pat-seq-pairs . body) (each-match-expander f pat-seq-pairs body 'mapdo)) |