+(defclass specializer-with-object (specializer) ())
+
+(defclass exact-class-specializer (specializer) ())
+
+(defclass class-eq-specializer (exact-class-specializer
+ specializer-with-object)
+ ((object :initarg :class
+ :reader specializer-class
+ :reader specializer-object)))
+
+(defclass class-prototype-specializer (specializer-with-object)
+ ((object :initarg :class
+ :reader specializer-class
+ :reader specializer-object)))
+
+(defclass eql-specializer (exact-class-specializer specializer-with-object)
+ ((object :initarg :object :reader specializer-object
+ :reader eql-specializer-object)))
+
+(defvar *eql-specializer-table* (make-hash-table :test 'eql))
+
+(defun intern-eql-specializer (object)
+ (or (gethash object *eql-specializer-table*)
+ (setf (gethash object *eql-specializer-table*)
+ (make-instance 'eql-specializer :object object))))
+
+(defclass class (dependent-update-mixin
+ definition-source-mixin
+ specializer)
+ ((name