anchor.diff:    (if (null forms)
         t
         (if (not (consp forms))
  -	  (error 'malformed-body :body forms)
  +	  (error 'malformed-body :name 'and :body forms)
   	  (if (null (cdr forms))
   	      (car forms)
   	      `(if ,(car forms)
  
positive.code: 		       (not (null keys)))
  		  `(if (eql ,variable ,keys)
  		       (progn ,@forms)
  		       ,(expand-e/ccase-clauses (cdr clauses) variable final))
  		  `(if (or ,@(eql-ify keys variable))
  		       (progn ,@forms)
  		       ,(expand-e/ccase-clauses (cdr clauses) variable final))))))))
  
  ;;; For ECASE, the default is to signal a type error. 
  (defmacro ecase (keyform &rest clauses)
    (let* ((variable (gensym))
  	 (keys (collect-e/ccase-keys clauses))
  	 (final `(error 'ecase-type-error
  			:datum ,variable
  			:expected-type '(member ,@keys))))
      `(let ((,variable ,keyform))
         ,(expand-e/ccase-clauses clauses variable final))))
  
  ;;; This function is does the same thing as
  ;;; (mapcar #'list vars vals), but since we are not
  
negative.code: ;;; clause is a proper list.  The default case depends on whether we
  ;;; have a CCTYPECASE or an ETYPECASE, so we pass that as an argument
  ;;; (final).
  (defun expand-e/ctypecase-clauses (clauses variable final name)
    (if (null clauses)
        final
        (if (not (consp clauses))
  	  (error 'malformed-typecase-clauses
  		 :name name
  		 :clauses clauses)
  	  (let ((clause (car clauses)))
  	    (unless (and (proper-list-p clause)
  			 (not (null clause)))
  	      (error 'malformed-typecase-clause
  		     :name name
  		     :clause clause))
  	    (let ((type (car clause))
  		  (forms (cdr clause)))
  	      `(if (typep ,variable ,type)
  		   (progn ,@forms)
  		   ,(expand-e/ctypecase-clauses (cdr clauses) variable final name)))))))
  
  ;;; As with ECASE, the default for ETYPECASE is to signal an error.
  (defmacro etypecase (keyform &rest clauses)
    (let* ((variable (gensym))
  	 (keys (collect-e/ctypecase-keys clauses))
  	 (final `(error 'etypecase-type-error
  			:name 'etypecase
  			:datum ,variable
  			:expected-type '(member ,@keys))))
      `(let ((,variable ,keyform))
         ,(expand-e/ctypecase-clauses clauses variable final 'etypecase))))
  
  ;;; As with CCASE, the default for CTYPECASE is is to signal a
  ;;; correctable error, and to allow the value to be altered by the
  