anchor.diff:    ((%tag :initarg :tag :reader tag)
      (%form :initarg :form :reader form)))
   
  -(define-condition throw-special-form-must-be-proper-list 
  -    (compilation-program-error)
  -  ())
  -
   (define-condition throw-must-have-exactly-two-arguments
       (compilation-program-error)
     ())
   
   (defmethod convert-compound
       ((symbol (eql 'throw)) form environment)
  -  (unless (sicl-code-utilities:proper-list-p form)
  -    (error 'throw-special-form-must-be-proper-list
  -	   :expr form))
  +  (check-special-form-proper-list form)
     (unless (= (length form) 3)
       (error 'throw-must-have-exactly-two-arguments
   	   :expr form))
  
positive.code: (defclass tagbody-ast (ast)
    ((%items :initarg :items :reader items)))
  
  (define-condition tagbody-special-form-must-be-proper-list 
      (compilation-program-error)
    ())
  
  (defmethod convert-compound
      ((symbol (eql 'tagbody)) form environment)
    (unless (sicl-code-utilities:proper-list-p form)
      (error 'tagbody-special-form-must-be-proper-list
  	   :form))
    (let ((tag-entries
  	  (loop for item in (cdr form)
  		when (symbolp item)
  
negative.code:    (%vals :initarg :vals :reader vals)
     (%body :initarg :body :reader body)))
  
  (define-condition progv-must-have-at-least-two-arguments
      (compilation-program-error)
    ())
  
  (defmethod convert-compound
      ((symbol (eql 'progv)) form environment)
    (check-special-form-proper-list form)
    (unless (>= (length form) 3)
      (error 'progv-must-have-at-least-two-arguments
  	   :expr form))
  