(defclass request-meta (c2mop:standard-class) ()) (defclass dynamic-slot (c2mop:standard-direct-slot-definition) ()) (defmethod c2mop:validate-superclass ((class request-meta) (metaclass standard-class)) t) (defmethod c2mop:validate-superclass ((class dynamic-slot) (metaclass standard-class)) t) (defmethod c2mop:slot-definition-allocation ((slot dynamic-slot)) (call-next-method)) (defmethod c2mop:compute-effective-slot-definition ((class dynamic-slot) name dslots) (declare (ignore name dslots)) (let ((slot (call-next-method))) slot)) (defmethod make-instance ((class request-meta) &rest initargs &key &allow-other-keys) (let ((to-be-slots (second (member :sym initargs)))) (let ((nslots (mapcar (lambda (direct) (sb-mop:compute-effective-slot-definition class (c2mop:slot-definition-name direct) (list direct))) (mapcar (lambda (sym) (make-instance 'dynamic-slot :name sym)) to-be-slots)))) (apply #'call-next-method class initargs))))