-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))))
-
+ PLACE."
+ `(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)