anchor.diff:        (direct-subclasses :initform ())
         (direct-methods :initform ()))))
   
  -; Stub
  -(defun mop-make-instance (class-name &rest all-keys)
  -  (list class-name all-keys))
  -
  -;-------------------------------------------------------------------------------
  -; defclass
  -;-------------------------------------------------------------------------------
  -
  -(let ((mop-class-table (make-hash-table :test #'eq)))
  -
  -  (defun mop-find-class (symbol &optional (errorp t))
  -    (let ((class (gethash symbol mop-class-table nil)))
  -      (if (and (null class) errorp)
  -          (error "No class named ~S." symbol)
  -          class)))
  -
  -  (defun (setf mop-find-class) (new-value symbol)
  -    (setf (gethash symbol mop-class-table) new-value))
  -
  -)
  -
  -(defun mop-canonicalize-direct-superclass (class-name)
  -  `(find-class ',class-name))
  -
  -(defun mop-canonicalize-direct-superclasses (direct-superclasses)
  -  `(list ,@(mapcar #'mop-canonicalize-direct-superclass direct-superclasses)))
  +(defun mop-class-name (class)
  +  (mop-std-slot-value class 'name))
  +(defun (setf mop-class-name) (new-value class)
  +  (setf (mop-slot-value class 'name) new-value))
  +
  +(defun mop-class-direct-superclasses (class)
  +  (mop-slot-value class 'direct-superclasses))
  +(defun (setf mop-class-direct-superclasses) (new-value class)
  +  (setf (mop-slot-value class 'direct-superclasses) new-value))
  +
  +(defun mop-class-direct-slots (class)
  +  (mop-slot-value class 'direct-slots))
  +(defun (setf mop-class-direct-slots) (new-value class)
  +  (setf (mop-slot-value class 'direct-slots) new-value))
  +
  +(defun mop-class-precedence-list (class)
  +  (mop-slot-value class 'class-precedence-list))
  +(defun (setf mop-class-precedence-list) (new-value class)
  +  (setf (mop-slot-value class 'class-precedence-list) new-value))
  +
  +(defun mop-class-slots (class)
  +  (mop-slot-value class 'effective-slots))
  +(defun (setf mop-class-slots) (new-value class)
  +  (setf (mop-slot-value class 'effective-slots) new-value))
  +
  +(defun mop-direct-subclasses (class)
  +  (mop-slot-value class 'direct-subclasses))
  +(defun (setf mop-class-direct-subclasses) (new-value class)
  +  (setf (mop-slot-value class 'direct-subclasses) new-value))
  +
  +(defun mop-direct-methods (class)
  +  (mop-slot-value class 'direct-methods))
  +(defun (setf mop-class-direct-methods) (new-value class)
  +  (setf (mop-slot-value class 'direct-methods) new-value))
  +
  +(defmacro mop-defclass (name direct-superclasses direct-slots &rest options)
  +  `(mop-ensure-class ',name
  +     :direct-superclasses ,(mop-canonicalize-direct-superclasses direct-superclasses)
  +     :direct-slots ,(mop-canonicalize-direct-slots direct-slots)
  +     ,@(mop-canonicalize-defclass-options options)))
  +
  +(defun mop-canonicalize-direct-slots (direct-slots)
  +  `(list ,@(mapcar #'mop-canonicalize-direct-slot direct-slots)))
   
   (defun mop-canonicalize-direct-slot (spec)
     (if (symbolp spec)
  
positive.code: (defun mop-canonicalize-defclass-options (options)
    (mop-mapappend #'mop-canonicalize-defclass-option options))
  
  (defun mop-ensure-class (name &rest all-keys)
    (if (mop-find-class name nil)
        (error "Can't redefine the class named ~S." name)
  
negative.code:         (setf (mop-find-generic-function function-name) gf)
          gf)))
  
  (defun mop-finalize-generic-function (gf)
    (setf (mop-generic-function-discriminating-function gf)
          (funcall (if (eq (mop-class-of gf) mop-the-class-standard-gf)
                       #'mop-std-compute-discriminating-function
  