anchor.diff:  ;;;
   ;;; Modifying mold-level stuff
   ;;;
  +(defun (setf object-mold) (new-mold object)
  +  (with-accessors ((new-lineage mold-lineage)) new-mold
  +    (with-accessors ((old-lineage mold-lineage)) (%object-mold object)
  +      (unless (eq new-lineage old-lineage)
  +        (setf (gethash object (lineage-members new-lineage)) (%object-children object))
  +        (remhash object (lineage-members old-lineage)))))
  +  (setf (%object-mold object) new-mold
  +        (%object-hierarchy object) (compute-object-hierarchy-list object))
  +  new-mold)
  +
   (defun change-mold (object new-mold)
     "Creates a new property-value vector in OBJECT, according to NEW-MOLD's specification, and
   automatically takes care of bringing the correct property-values over into the new vector, in the
  
positive.code:           :feature "Passing a non-list :parents option to #'OBJECT")
      (setf parents (list parents)))
    (handler-case
        (setf (%object-mold object) (ensure-mold (or parents (list =standard-object=))))
      (topological-sort-conflict (conflict)
        (error 'object-hierarchy-error :object object :conflict conflict)))
    (setf (%object-children object) nil
          (%object-hierarchy object) (compute-object-hierarchy-list object))
    (apply 'init-object object all-keys))
  
  (defun clone (object &optional (metaobject (%object-metaobject object)))
  
negative.code:           (let ((pname (svref properties position)))
              (awhen (position pname new-properties)
                (setf (svref new-values it) (svref old-values position)))))))
      (setf (object-mold object) new-mold
            (%object-property-values object) new-values))
    object)
  
  