summaryrefslogtreecommitdiff
path: root/misc/leaf-classes.lisp
blob: 711890ff1123947adf4222a88604555579f2cda4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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)))