anchor.diff:    (env)
     (name #:unnamed
           :type function-name))
  +
  +(define-condition advise-condition ()
  +  ((name :initarg :name
  +         :reader advise-condition-name)))
  +
  +(define-condition already-advised (simple-program-error
  +                                   advise-condition)
  +  ()
  +  (:repor
  +   (lambda (c s)
  +     (format s "Already advised: ~s" (advise-condition-name c)))))
  +
  +(define-condition not-advised (simple-program-error
  +                                   advise-condition)
  +  ()
  +  (:repor
  +   (lambda (c s)
  +     (format s "Not advised: ~s" (advise-condition-name c)))))
  +
   
   (defconstant %advise-expand% 8)
   
  
positive.code:       (adv
         (setf %advise-rec% (delete adv %advise-rec% :test #'eq))
         (values adv))
        (t (error "NOT ADVISED: ~S" name)))))
  
  
    
  
negative.code:                    :key #'advised-name)))
        (cond
          (o (values o))
          (errorp (error 'not-advised :name name))
          (t (values nil nil))))))
  
  (defun register-advise (name env form)
    ;; FIXME: lock %ADVISE-REC% (WRITE) in this function
    (let ((adv (get-advise name env nil)))
      (cond
        ((and adv
              (not (eq form (advised-original-function adv))))
         (error 'already-advised :name name))
        (t (let ((adv (make-advise-record name env form)))
             (vector-push-extend adv %advise-rec% %advise-expand%)
             (values adv))))))
  