From 943a6597b2bcd1b3ed208458a5cba61ad5b4051c Mon Sep 17 00:00:00 2001 From: Nathan Ringo Date: Mon, 18 Nov 2024 00:34:23 -0600 Subject: ... --- misc/leaf-classes.lisp | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 misc/leaf-classes.lisp (limited to 'misc') 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))) -- cgit v1.2.3