anchor.diff:            "SETF VALUES not supported here.")
     (if (consp place)
         (let ((expander (and (symbolp (car place))
  -                           (get (car place) 'setf-expander)))
  -            (update-fn (and (symbolp (car place))
  -                            (get (car place) 'setf-update-fn))))
  +                           (get (car place) 'setf-expander))))
           (cond
             (expander
              ;; Invoke the exansion function.
              (funcall expander place environment))
  -          (update-fn
  -           (let ((vars '())
  -                 (vals '())
  -                 (store-sym (gensym)))
  -             (dolist (arg (cdr place))
  -               (setf vars (cons (gensym) vars)
  -                     vals (cons arg vals)))
  -             (setf vars (nreverse vars)
  -                   vals (nreverse vals))
  -             (values vars vals (list store-sym)
  -                     (append (list update-fn)
  -                             vars
  -                             (list store-sym))
  -                     (list* (car place) vars))))
             (t (multiple-value-bind (expansion expanded-p)
                    (macroexpand-1 place environment)
                  (if expanded-p
  
positive.code:                      store-syms
                       expansion
                       `(,access-fn ,@param-syms)))))
      (setf (get access-fn 'setf-expander) #'expand
            (get access-fn 'setf-update-fn) nil))
    access-fn)
  )
  
  
negative.code:          `(defsetf-short ,access-fn ,@args))))
  
  (defmacro defsetf-short (access-fn update-fn &optional documentation)
    (check-type documentation (or null string))
    (let ((args (gensym "ARGS"))
          (value (gensym "VALUE")))
      `(defsetf-long ,access-fn (&rest ,args) (,value)
         ,@documentation
         `(,',update-fn ,@,args ,,value))))
  
  (defmacro defsetf-long (access-fn lambda-list store-variables &body body)
    (when (member '&aux lambda-list)
  