summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--share/txr/stdlib/match.tl7
1 files changed, 6 insertions, 1 deletions
diff --git a/share/txr/stdlib/match.tl b/share/txr/stdlib/match.tl
index b6dcd442..32f8b7ca 100644
--- a/share/txr/stdlib/match.tl
+++ b/share/txr/stdlib/match.tl
@@ -314,6 +314,7 @@
(defun compile-hash-match (hash-expr obj-var var-list)
(tree-bind (op . pairs) hash-expr
(let* ((hash-alist-var (gensym "hash-alist-"))
+ (hash-alt-val ^',(gensym "alt"))
(need-alist-p nil)
(hash-matches
(collect-each ((pair pairs))
@@ -338,8 +339,12 @@
(let ((vm (compile-match val (gensym "val") var-list)))
(push
(new match-guard
+ guard-expr ^(neq ,vm.obj-var ,hash-alt-val))
+ vm.guard-chain)
+ (push
+ (new match-guard
vars (list vm.obj-var)
- var-exprs ^((gethash ,obj-var ',key)))
+ var-exprs ^((gethash ,obj-var ',key, hash-alt-val)))
vm.guard-chain)
vm)))))))
(guard (new match-guard