diff options
author | Nathan Ringo <nathan@remexre.com> | 2024-11-18 00:34:23 -0600 |
---|---|---|
committer | Nathan Ringo <nathan@remexre.com> | 2024-11-18 00:34:23 -0600 |
commit | 943a6597b2bcd1b3ed208458a5cba61ad5b4051c (patch) | |
tree | d0acf34996941417aca241f5f01e399aaa90af39 /misc/leaf-classes.lisp | |
parent | 57331ba9756df043b5c665aa4952a0a7b38799e5 (diff) |
...
Diffstat (limited to 'misc/leaf-classes.lisp')
-rw-r--r-- | misc/leaf-classes.lisp | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/misc/leaf-classes.lisp b/misc/leaf-classes.lisp new file mode 100644 index 0000000..711890f --- /dev/null +++ b/misc/leaf-classes.lisp @@ -0,0 +1,27 @@ +(in-package :cl-user) + +(defun class-in-cl-package (class) + (eql (symbol-package (class-name class)) (find-package 'cl))) + +(defun class-has-no-standard-subclasses (class) + (notany #'class-in-cl-package (sb-mop:class-direct-subclasses class))) + +(let ((queue nil) + (set nil)) + (do-external-symbols (sym 'cl) + (let ((class (find-class sym nil))) + (when class + (push class queue)))) + (loop + while queue + do (let ((class (pop queue))) + (cond + ((class-has-no-standard-subclasses class) + (push class set))))) + (flet ((name (class) + (symbol-name (class-name class)))) + (setf set (stable-sort set #'string-lessp :key #'name)) + (setf set (remove-duplicates set :key #'class-name))) + (loop + for class in set + do (format t "~a~%" class))) |