anchor.diff:      (dolist* ((var . value) (binds let))
         (declare (ignore value))
         (setf env (register env :let var :dummy)))
  -    (setf (body let) (walk-implict-progn let (cddr form) env :declare t))))
  +    (multiple-value-setf ((body let) nil (declares let)) (walk-implict-progn let (cddr form) env :declare t))))
   
   (defclass let*-form (variable-binding-form)
     ())
  
positive.code:                  (extend-env (car arguments)))))))
        (setf (arguments func) (nreverse arguments))
        ;; 2) parse the body
        (setf (body func) (walk-implict-progn func (cddr form) env :declare t))
        ;; all done
        func)))
  
  
negative.code: (defclass implicit-progn-mixin ()
    ((body :accessor body :initarg :body)))
  
  (defclass implicit-progn-with-declare-mixin (implicit-progn-mixin)
    ((declares :accessor declares :initarg :declares)))
  
  (defclass binding-form-mixin ()
    ((binds :accessor binds :initarg :binds)))
  
  (defmacro multiple-value-setf (places form)
    (let ((names (loop for place in places collect (gensym))))
      `(multiple-value-bind ,names ,form
         ,@(loop for name in names for place in places if (null place) collect `(declare (ignore ,name)))
  	 (setf ,@(loop
  		    for name in names
  		    for place in places
  		    if place collect place
  		    if place collect name)))))
  
  (defun split-body (body env &key (docstring t) (declare t))
    (let ((documentation nil) 
  	(decl nil)
  	(decls nil))
      (flet ((done ()
               (return-from split-body (values body env documentation decls))))
        (loop
           for form = (car body)
           while body
  