[slime-devel] who-calls for openmcl
Takehiko Abe
keke at gol.com
Fri Mar 16 06:48:17 UTC 2007
I noticed that who-calls doesn't work for methods in openmcl.
Here is a quick hack. It appears to work for me.
;; xref-locations from swank-openmcl.lisp
(defun xref-locations (relation name &optional (inverse nil))
(flet ((function-source-location (entry)
(multiple-value-bind (info name)
(ccl::edit-definition-p
(ccl::%db-key-from-xref-entry entry)
(if (eql (ccl::xref-entry-type entry)
'macro)
'function
(ccl::xref-entry-type entry)))
(cond ((not info)
(list :error
(format nil "No source info available for ~A"
(ccl::xref-entry-name entry))))
((typep (caar info) 'ccl::method)
`(:location
(:file ,(remove-filename-quoting
(namestring (translate-logical-pathname
(cdr (car info))))))
(:method
,(princ-to-string (ccl::method-name (caar info)))
,(mapcar 'princ-to-string
(mapcar #'specializer-name
(ccl::method-specializers
(caar info))))
,@(mapcar 'princ-to-string
(ccl::method-qualifiers (caar info))))
nil))
(t
(canonicalize-location (cdr (first info)) name))))))
(declare (dynamic-extent #'function-source-location))
(loop for xref in (if inverse
(ccl::get-relation relation name
:wild :exhaustive t)
(ccl::get-relation relation
:wild name :exhaustive t))
for function = (ccl::xref-entry-name xref)
collect `((function ,function)
,(function-source-location xref)))))
More information about the slime-devel
mailing list