anchor.diff:          slot-defs)))
   
   
  -(defmacro %proto-method (name args docs &body body)
  +(defmacro proto-method (name args docs &body body)
     "Define a generic function if it doesn't already exist, then define
     a method on that generic function. name is the function/method name.
     args are the method args, possibly including specializers. docs is
  
positive.code:             (,finder (,base object) query))))
  
     (when adder
       `(%proto-method ,adder ((object ,class) new-item)
            ,(format nil "Add the given item to the object's own ~(~A~) reader, NOT including those inherited from the object's ~(~A~). If the list already contains an item that matches the given item, the existing item will be removed before adding the given item." (or reader slot-name) base)
          (setf (slot-value object ',slot-name)
                (union (and (slot-boundp object ',slot-name)
  
negative.code:               val))))
  
     (when writer
       `(proto-method ,writer (value (object ,class))
            ,(format nil "Set the object's own ~(~A~) list, NOT including those inherited from the object's ~(~A~)." (or reader slot-name) base)
          (setf (slot-value object ',slot-name) value)))
  
     (when own-finder
       `(proto-method ,own-finder ((object ,class) query)
            ,(format nil "Find and return the first matching item in the object's own ~(~A~) list, NOT including those inherited from the object's ~(~A~). Return nil if there is no match." (or reader slot-name) base)
          (if (slot-boundp object ',slot-name)
              (find query (slot-value object ',slot-name)
  