anaphora.lisp: Rewrite `asetf' to use `with-places/gensyms'.
authorMark Wooding <mdw@distorted.org.uk>
Wed, 21 Oct 2015 23:46:28 +0000 (00:46 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Thu, 22 Oct 2015 00:21:57 +0000 (01:21 +0100)
This adds a dependency on `mdw-base.lisp'.  That's what the base package
is for.

anaphora.lisp
mdw.asd

index 3fd69c5..be2fae4 100644 (file)
@@ -24,7 +24,7 @@
 ;;; Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
 (defpackage #:anaphora
-  (:use #:common-lisp))
+  (:use #:common-lisp #:mdw.base))
 (in-package #:anaphora)
 
 (export 'it)
        ,@body)))
 
 (export 'asetf)
-(defmacro asetf (&rest pairs &environment env)
+(defmacro asetf (&rest pairs)
   "Set PLACE to value of FORM; in FORM, `it' is bound to current value of
    PLACE."
-  (labels ((foo (pairs)
-            (when pairs
-              (let ((place (car pairs))
-                    (form (cadr pairs))
-                    (rest (cddr pairs)))
-                (cons (multiple-value-bind
-                          (valtmps valforms newtmps setform getform)
-                          (get-setf-expansion place env)
-                        `(let* ,(mapcar #'list valtmps valforms)
-                           (let* ((it ,getform)
-                                  (,(car newtmps) ,form))
-                             ,setform)))
-                      (foo rest))))))
-    (cons 'progn (foo pairs))))
+  `(progn ,@(do ((list nil)
+                (pairs pairs (cddr pairs)))
+               ((endp pairs) (nreverse list))
+             (unless (cdr pairs)
+               (error "Odd number of arguments to `asetf'."))
+             (push (with-places/gensyms ((place (car pairs)))
+                     `(let ((it ,place))
+                        (declare (ignorable it))
+                        (setf ,place ,(cadr pairs))))
+                   list))))
 
 (export 'acond)
 (defmacro acond (&rest clauses)
diff --git a/mdw.asd b/mdw.asd
index 8a91809..9287a55 100644 (file)
--- a/mdw.asd
+++ b/mdw.asd
@@ -9,7 +9,7 @@
   :version "2.0.3"
   :author "Mark Wooding <mdw@distorted.org.uk>"
   :components ((:file "mdw-base")
-              (:file "anaphora")
+              (:file "anaphora" :depends-on ("mdw-base"))
               (:file "sys-base")
               (:file "factorial")
               (:file "queue")