anchor.diff:                   ,,set-var)
                 `(,',access-macro ,,inner-clone))))))))
   
  -(defmacro clone-slots (slots object maker)
  -  (let ((new (gensym "NEW"))
  -        (old (gensym "OLD"))
  -        (slot (gensym "SLOT")))
  -    `(let ((,new ,maker)
  -           (,old ,object))
  -       (dolist (,slot ',slots)
  -         (setf (slot-value ,new ,slot) (slot-value ,old ,slot)))
  -       ,new)))
  +(defun clone-slots (slots old new)
  +  (dolist (slot slots)
  +    (setf (slot-value new slot) (slot-value old slot)))
  +  new)
   
   (defgeneric clone (object))
   (defmethod clone (object)
  
positive.code: (defclass data-class (standard-class)
    ())
  
  (defmethod closer-mop:validate-superclass ((data-class data-class) superclass)
    (if (eq superclass (find-class 'standard-object))
        t
        (call-next-method)))
  
  
negative.code: (defmacro define-data (name direct-superclasses direct-slots &rest options)
    (when (find :metaclass options :key #'car)
      (error "metaclass option is forbidden"))
    (unless direct-superclasses
      (setf direct-superclasses '(data)))
    ;; We need to eval the class definition now so that the updater
    ;; functions are generated.
    `(eval-when (:compile-toplevel :load-toplevel :execute)
  