summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2015-05-09 07:00:50 -0700
committerKaz Kylheku <kaz@kylheku.com>2015-05-09 07:00:50 -0700
commit11719b83efac940a320467608e4ada589dccc10c (patch)
tree4ede398d61464e36ea478f0004bd5797485e764e
parent1d5bfd6ebd47444034478bdce836946085ca1367 (diff)
downloadtxr-11719b83efac940a320467608e4ada589dccc10c.tar.gz
txr-11719b83efac940a320467608e4ada589dccc10c.tar.bz2
txr-11719b83efac940a320467608e4ada589dccc10c.zip
* place.tl (set): Take multiple place/value pairs. Allow zero
arguments.
-rw-r--r--ChangeLog5
-rw-r--r--place.tl13
2 files changed, 15 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 955c60a3..96c1bc29 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
diff --git a/place.tl b/place.tl
index 7ace3b67..750e0c6c 100644
--- a/place.tl
+++ b/place.tl
@@ -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