diff options
-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 |