CMUCL introduces functions `(pcl:class-predicate CLASS)' for its own
internal purposes, and it's not interesting to list them.
(defun analyse-generic-functions (package)
(setf package (find-package package))
(flet ((function-name-core (name)
(defun analyse-generic-functions (package)
(setf package (find-package package))
(flet ((function-name-core (name)
- (etypecase name
- (symbol name)
- ((cons (eql setf) t) (cadr name)))))
+ (typecase name
+ (symbol (values name t))
+ ((cons (eql setf) t) (values (cadr name) t))
+ (t (values nil nil)))))
(let ((methods (make-hash-table))
(functions (make-hash-table))
(externs (make-hash-table)))
(let ((methods (make-hash-table))
(functions (make-hash-table))
(externs (make-hash-table)))
(when class
(dolist
(func (specializer-direct-generic-functions class))
(when class
(dolist
(func (specializer-direct-generic-functions class))
- (let ((name (function-name-core
- (generic-function-name func))))
- (when (or (not (eq (symbol-package name) package))
- (gethash name externs))
+ (multiple-value-bind (name knownp)
+ (function-name-core (generic-function-name func))
+ (when (and knownp
+ (or (not (eq (symbol-package name) package))
+ (gethash name externs)))
(setf (gethash func functions) t)
(dolist (method (specializer-direct-methods class))
(setf (gethash method methods) t)))))))))
(setf (gethash func functions) t)
(dolist (method (specializer-direct-methods class))
(setf (gethash method methods) t)))))))))