anchor.diff:  ;;;; * A Code Walker
   
   ;;;; ** Public Entry Point
  +
  +(defvar *warn-undefined* nil
  +  "When non-NIL any references to undefined functions or
  +  variables will signal a warning.")
   
   (defun walk-form (form &optional (parent nil) (env (make-walk-env)))
     "Walk FORM and return a FORM object."
  
positive.code:      ;; a globaly defined symbol-macro
       (walk-form (macroexpand-1 form) parent env))
      (t
       (make-instance 'free-variable-reference :name form
                      :parent parent :source form))))
  
  
negative.code: ;;;; FORM objects.
  
  (defvar *walker-handlers* (make-hash-table :test 'eq))
  
  (define-condition undefined-reference (warning)
    ((enclosing-code :accessor enclosing-code :initform nil)
     (name :accessor name :initarg :name)))
  
  (define-condition undefined-variable-reference (undefined-reference)
    ()
    (:report
     (lambda (c s)
       (if (enclosing-code c)
           (format s "Reference to unknown variable ~S in ~S." (name c) (enclosing-code c))
           (format s "Reference to unknown variable ~S." (name c) (enclosing-code c))))))
  
  (define-condition undefined-function-reference (undefined-reference)
    ()
    (:report
     (lambda (c s)
       (if (enclosing-code c)
           (format s "Reference to unknown function ~S in ~S." (name c) (enclosing-code c))
           (format s "Reference to unknown function ~S." (name c) (enclosing-code c))))))
  
  (defvar +atom-marker+ '+atom-marker+)
  
  