diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2015-05-09 07:00:50 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2015-05-09 07:00:50 -0700 |
commit | 11719b83efac940a320467608e4ada589dccc10c (patch) | |
tree | 4ede398d61464e36ea478f0004bd5797485e764e | |
parent | 1d5bfd6ebd47444034478bdce836946085ca1367 (diff) | |
download | txr-11719b83efac940a320467608e4ada589dccc10c.tar.gz txr-11719b83efac940a320467608e4ada589dccc10c.tar.bz2 txr-11719b83efac940a320467608e4ada589dccc10c.zip |
* place.tl (set): Take multiple place/value pairs. Allow zero
arguments.
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | place.tl | 13 |
2 files changed, 15 insertions, 3 deletions
@@ -1,3 +1,8 @@ +2015-05-09 Kaz Kylheku <kaz@kylheku.com> + + * place.tl (set): Take multiple place/value pairs. Allow zero + arguments. + 2015-05-08 Kaz Kylheku <kaz@kylheku.com> Crack down on redefinitions of built-ins. @@ -108,9 +108,16 @@ ^(with-gensyms (,deleter) (call-delete-expander ,deleter ,unex-place ,env ,body))) - (defmacro set (place value :env env) - (with-clobber-expander (ssetter) place env - ^(,ssetter ,value))) + (defmacro set (:env env . place-value-pairs) + (let ((assign-forms (mapcar (tb ((place : (value nil value-present-p))) + (unless value-present-p + (sys:eval-err "set: arguments must be pairs")) + (with-clobber-expander (ssetter) place env + ^(,ssetter ,value))) + (tuples 2 place-value-pairs)))) + (if (cdr assign-forms) + ^(progn ,*assign-forms) + (car assign-forms)))) (defmacro zap (place :env env) (with-update-expander (getter setter) place env |