diff options
Diffstat (limited to 'share')
-rw-r--r-- | share/txr/stdlib/match.tl | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/share/txr/stdlib/match.tl b/share/txr/stdlib/match.tl index d5063c40..adb85ea9 100644 --- a/share/txr/stdlib/match.tl +++ b/share/txr/stdlib/match.tl @@ -555,7 +555,8 @@ (compile-error *match-form* "bad clause syntax")) (let* ((flag (gensym "flag-")) (result (gensym "result-")) - (clause-matches [mapcar (op compile-match (car @1) obj) clauses]) + (objvar (gensym "obj-")) + (clause-matches [mapcar (op compile-match (car @1) objvar) clauses]) (clause-code (collect-each ((cl clauses) (cm clause-matches) (i 0)) @@ -565,9 +566,10 @@ (set ,result ,cm.(wrap-guards ^(set ,flag t) . forms)))))))) - ^(let (,flag ,result) - ,*clause-code - ,result))) + ^(alet ((,objvar ,obj)) + (let (,flag ,result) + ,*clause-code + ,result)))) (defmacro lambda-match (. clauses) (with-gensyms (args) |