From 11719b83efac940a320467608e4ada589dccc10c Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Sat, 9 May 2015 07:00:50 -0700 Subject: * place.tl (set): Take multiple place/value pairs. Allow zero arguments. --- ChangeLog | 5 +++++ place.tl | 13 ++++++++++--- 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 + + * place.tl (set): Take multiple place/value pairs. Allow zero + arguments. + 2015-05-08 Kaz Kylheku 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 -- cgit v1.2.3