"Creates a new read-modify-write macro like PUSH or INCF."
(let ((other-args nil)
(rest-arg nil)
- (env (gensym))
- (reference (gensym)))
+ (env (make-symbol "ENV")) ; To beautify resulting arglist.
+ (reference (make-symbol "PLACE"))) ; Note that these will be nonexistent
+ ; in the final expansion anyway.
;; Parse out the variable names and &REST arg from the lambda list.
(do ((ll lambda-list (cdr ll))
(arg nil))
(destructuring-bind
(lambda-list (&rest store-variables) &body body)
rest
- (let ((arglist-var (gensym "ARGS-"))
+ (let ((whole-var (gensym "WHOLE-"))
(access-form-var (gensym "ACCESS-FORM-"))
(env-var (gensym "ENVIRONMENT-")))
(multiple-value-bind (body local-decs doc)
(parse-defmacro `(,lambda-list ,@store-variables)
- arglist-var body access-fn 'defsetf
+ whole-var body access-fn 'defsetf
+ :environment env-var
:anonymousp t)
`(eval-when (:compile-toplevel :load-toplevel :execute)
(assign-setf-macro
',access-fn
(lambda (,access-form-var ,env-var)
- (declare (ignore ,env-var))
+ ,@local-decs
(%defsetf ,access-form-var ,(length store-variables)
- (lambda (,arglist-var)
- ,@local-decs
+ (lambda (,whole-var)
,body)))
nil
',doc))))))