anchor.diff:  ;;;
   ;;; Converting SYMBOL-MACROLET.
   
  -(define-condition macrolet-must-have-at-least-one-argument
  -    (compilation-program-error)
  -  ())
  -
   (defmethod convert-compound
       ((head (eql 'symbol-macrolet)) form environment)
  -  (check-special-form-proper-list form)
  -  (unless (>= (length form) 2)
  -    (error 'macrolet-must-have-at-least-one-argument
  -	   :form form))
  +  (sicl-code-utilities:check-form-proper-list form)
  +  (sicl-code-utilities:check-argcount form 1 nil)
     ;; FIXME: syntax check bindings
     (let ((new-environment environment))
       (loop for (name expansion) in (cadr form)
  
positive.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))
    (let ((body (make-instance 'progn-ast
  		:forms (convert-sequence (cdddr form) environment))))
      (make-instance 'progv-ast
  
negative.code:   ((%tag :initarg :tag :reader tag)
     (%body :initarg :body :reader body)))
  
  (defmethod convert-compound
      ((symbol (eql 'catch)) form environment)
    (sicl-code-utilities:check-form-proper-list form)
    (sicl-code-utilities:check-argcount form 1 nil)
    (let ((forms (convert-sequence (cddr form) environment)))
      (make-instance 'catch-ast
        :tag (convert (cadr form) environment)
  