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:                       `(setq ,place ,store-sym)
                        place))))))
  
  (defun expand-setf-values (place value env)
    "Expand a (setf (values foo...) bar) place."
    ;; TODO: Evaluation order & env.
    (let ((tmp-values (loop for i below (length (rest place))
                           collect (gensym "VALUE"))))
      `(multiple-value-bind ,tmp-values ,value
         (setf ,@(loop
                    for p in (rest place)
                    for v in tmp-values
                    collect p
                    collect v))
         ;; Evaluate to all values.
         (values ,@tmp-values))))
  
  (defun expand-setf (place value env)
    "Expand a normal setf place."
    (multiple-value-bind (vars vals stores setter getter)
  
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))))
  