anchor.diff:        (setf (first results) 'psetf)
         `(progn ,results 'nil))))
   
  -(eval-when (:compile-toplevel :load-toplevel :execute)
  -(defun %defsetf-short-form (access-fn update-fn documentation)
  -  (declare (ignore documentation))
  -  (setf (get access-fn 'setf-expander) nil
  -        (get access-fn 'setf-update-fn) update-fn)
  -  access-fn)
  -)
  -
   (defmacro defsetf (access-fn &rest args)
     (cond ((listp (first args))
            `(defsetf-long ,access-fn ,@args))
  
positive.code:           "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))))
          (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
  
negative.code:                      store-syms
                       expansion
                       `(,access-fn ,@param-syms)))))
      (setf (get access-fn 'setf-expander) #'expand))
    access-fn)
  )
  
  