anchor.diff:                         (list* (car place) call-vars)))))
   
   (defun get-setf-expansion (place &optional environment)
  -  (assert (not (and (consp place) (eql (first place) 'values))) (place)
  -          "SETF VALUES not supported here.")
     (if (consp place)
         (let ((expander (and (symbolp (car place))
                              (get (car place) 'setf-expander))))
  
positive.code: (define-modify-macro decf (&optional (delta 1)) -)
  
  (defmacro psetf (&environment env &rest pairs)
    (when (oddp (length pairs))
      (error "Odd number of arguments to PSETF"))
    ;; Evaluate all subforms before performing assignments.
    (let ((bindings '())
          (assignments '()))
      (loop
         for (place newvalue) on pairs by #'cddr
         do
           (multiple-value-bind (vars vals stores setter getter)
               (get-setf-expansion place env)
             (declare (ignore getter))
             (when (or (endp stores) (rest stores))
               ;; FIXME
               (error "Multiple (or no) store values not implemented in PSETF for place ~S" place))
             (loop
                for var in vars
                for val in vals
                do (push (list var val) bindings))
             (push (list (first stores) newvalue) bindings)
             (push setter assignments)))
      `(let ,(nreverse bindings)
         (progn
           ,@(nreverse assignments))
         nil)))
  
  ;; FIXME...
  (defmacro rotatef (&rest places)
  
negative.code:             (list store)
              `(apply #'(setf ,real-function) ,store ,@vars)
              `(apply #',real-function ,@vars))))
  
  (define-setf-expander values (&rest places &environment env)
    (let ((temp-vars '())
          (temp-forms '())
          (store-vars '())
          (store-forms '())
          (read-forms '()))
      (loop
         for place in places
         do
           (multiple-value-bind (place-temp-vars
                                 place-temp-forms
                                 place-store-vars
                                 place-store-form
                                 place-read-form)
               (get-setf-expansion place env)
             (setf temp-vars (append temp-vars place-temp-vars)
                   temp-forms (append temp-forms place-temp-forms))
             (dolist (inner-value (rest place-store-vars))
               (push inner-value temp-vars)
               (push nil temp-forms))
             (setf store-vars (append store-vars (list (first (or place-store-vars
                                                                  (list (gensym)))))))
             (setf store-forms (append store-forms (list place-store-form)))
             (setf read-forms (append read-forms (list place-read-form)))))
      (values temp-vars
              temp-forms
              store-vars
              `(values ,@store-forms)
              `(values ,@read-forms))))
  