anchor.diff:                            (format *query-io* "~&Value to use: ")
                             (list (read *query-io*)))
              value))))
  -
  -(defun direct-property-p (object property-name)
  -  "Returns T if OBJECT has a property called PROPERTY-NAME as a direct property.
  -NIL otherwise."
  -  (if (std-object-p object)
  -      (std-sheeple:direct-property-p object property-name)
  -      (smop:direct-property-p (object-metaobject object) object property-name)))
  -(defun std-sheeple:direct-property-p (object property-name)
  -  (handler-case (progn (direct-property-value object property-name) t)
  -    (unbound-property () nil)))
  -
  -(defun property-makunbound (object property-name)
  -  "Removes OBJECT's direct property named PROPERTY-NAME. Signals an error if there is no such
  -direct property. Returns OBJECT."
  -  (if (std-object-p object)
  -      (std-sheeple:property-makunbound object property-name)
  -      (smop:property-makunbound (object-metaobject object) object property-name)))
  -(defun std-sheeple:property-makunbound (object property-name)
  -  (if (direct-property-p object property-name)
  -      (prog1 object
  -        (change-mold object
  -                     (ensure-mold (object-parents object)
  -                                  (remove property-name
  -                                          (mold-properties (%object-mold object))))))
  -      (error 'unbound-property :object object :property-name property-name)))
  -
  -(defun remove-property (object property-name)
  -  "Removes OBJECT's direct property named PROPERTY-NAME. Signals an error if there is no such
  -direct property. Returns OBJECT."
  -  (warn 'deprecated-feature :feature #'remove-property :version "3.0.2")
  -  (property-makunbound object property-name))
  -
  -(defun remove-all-direct-properties (object)
  -  "Wipes out all direct properties and their values from OBJECT."
  -  (if (std-object-p object)
  -      (std-sheeple:remove-all-direct-properties object)
  -      (smop:remove-all-direct-properties (object-metaobject object) object)))
  -(defun std-sheeple:remove-all-direct-properties (object)
  -  (change-mold object (ensure-mold (object-parents object) #()))
  -  object)
  -
   
   ;;;
   ;;; Value
  
positive.code:                           (available-properties object)))))
  
  ;;;
  ;;; Convenience
  ;;;
  (defmacro with-properties (properties object &body body)
    (let ((sh (gensym)))
  
negative.code:   ;; Finally, for SETF-compliance, we return the value.
    new-value)
  
  (defun property-makunbound (object property-name)
    "Removes OBJECT's direct property named PROPERTY-NAME. Signals an error if there is no such
  direct property. Returns OBJECT."
    (if (std-object-p object)
        (std-sheeple:property-makunbound object property-name)
        (smop:property-makunbound (object-metaobject object) object property-name)))
  (defun std-sheeple:property-makunbound (object property-name)
    (if (direct-property-p object property-name)
        (prog1 object
          (change-mold object
                       (ensure-mold (object-parents object)
                                    (remove property-name
                                            (mold-properties (%object-mold object))))))
        (error 'unbound-property :object object :property-name property-name)))
  
  (defun remove-property (object property-name)
    "Removes OBJECT's direct property named PROPERTY-NAME. Signals an error if there is no such
  direct property. Returns OBJECT."
    (warn 'deprecated-feature :feature #'remove-property :version "3.0.2")
    (property-makunbound object property-name))
  
  (defun remove-all-direct-properties (object)
    "Wipes out all direct properties and their values from OBJECT."
    (if (std-object-p object)
        (std-sheeple:remove-all-direct-properties object)
        (smop:remove-all-direct-properties (object-metaobject object) object)))
  (defun std-sheeple:remove-all-direct-properties (object)
    (change-mold object (ensure-mold (object-parents object) #()))
    object)
  
  ;;;
  ;;; Reflection API
  ;;;
  (defun direct-property-p (object property-name)
    "Returns T if OBJECT has a property called PROPERTY-NAME as a direct property.
  NIL otherwise."
    (if (std-object-p object)
        (std-sheeple:direct-property-p object property-name)
        (smop:direct-property-p (object-metaobject object) object property-name)))
  (defun std-sheeple:direct-property-p (object property-name)
    (let ((has-property-p t))
      (handler-case (direct-property-value object property-name)
        (unbound-property () (setf has-property-p nil)))
      has-property-p))
  
  (defun property-owner (object property-name)
    "Returns the object, if any, from which OBJECT would fetch the value for PROPERTY-NAME"
    (if (std-object-p object)
  