;; Note (sb-ext:quit) at the end. (require :closer-mop) (defvar *class-count* 100) (defclass root-meta (standard-class) ()) (defmethod closer-mop:validate-superclass ((class root-meta) (superclass standard-class)) t) (defclass root (standard-class) () (:metaclass root-meta)) (defmethod closer-mop:validate-superclass ((class root) (superclass standard-class)) t) (sb-ext:gc :full t) (room) (terpri) ;; For each subclass, define a metaclass whose only instance is the subclass. (loop :for i :from 0 :to *class-count* :do (format t "~A " i) (finish-output) (let ((metaclass (intern (format nil "METACLASS-~A" i))) (class (intern (format nil "CLASS-~A" i)))) (closer-mop:ensure-class metaclass :direct-superclasses '(root-meta)) (closer-mop:ensure-class class :direct-superclasses '(standard-object) :metaclass metaclass))) (terpri) (terpri) (sb-ext:gc :full t) (room) (sb-ext:quit)