[slime-devel] MOP access
Rui Patrocínio
rui.patrocinio at netvisao.pt
Tue Aug 31 14:47:13 UTC 2004
Hi,
Is there any access to MOP-like functionality in swank? I've not found
it so I create a simple interface, similar to the xref one.
swank.lisp:
;;; MOP
(defslimefun mop (type symbol-name)
(let ((symbol (parse-symbol-or-lose symbol-name *buffer-package*)))
(ecase type
(:subclasses (class-direct-subclasses symbol))
(:superclasses (class-direct-superclasses symbol)))))
Maybe 'mop' isn't the best name.
swank-backend.lisp:
;;; MOP
(definterface class-direct-subclasses (class-name)
"Return the list of subclasses of class.")
(definterface class-direct-superclasses (class-name)
"Return the list of superclasses of class.")
swank-cmucl.lisp:
;;; CLOS MOP
(defimplementation class-direct-subclasses (class-name)
(handler-bind ((simple-error (lambda (c)
(declare (ignore c))
(return-from class-direct-subclasses
nil))))
(let* ((class (find-class class-name))
(subclasses (pcl:class-direct-subclasses class)))
(mapcar #'(lambda (x)
(symbol-name (pcl:class-name x)))
subclasses))))
(defimplementation class-direct-superclasses (class-name)
(handler-bind ((simple-error (lambda (c)
(declare (ignore c))
(return-from class-direct-superclasses
nil))))
(let* ((class (find-class class-name))
(superclasses (pcl:class-direct-superclasses class)))
(mapcar #'(lambda (x)
(symbol-name (pcl:class-name x)))
superclasses))))
The handler is to catch the errors of find-class with a class that
doesn't exist. Maybe there's a better behaviour in that situation.
I have a generic browser in emacs that can be used to see the stuff
above, xrefs,etc. I'll release the code soon.
Rui Patrocínio
More information about the slime-devel
mailing list