[slime-devel] (def (method ...)) arglist

Max Mikhanosha max at openchat.com
Mon Oct 3 00:42:27 UTC 2011


For folks using cl-def, definer, and other packages that have the (def
(method flags) method-name) syntax, the following snippet added to
~/.swank.lisp will start using method arguments in the message
area. Replace demacs:def with the correct package name, if you are not
using demacs.

(swank:swank-require :swank-arglists)
(in-package :swank)

(defmethod arglist-dispatch ((operator (eql 'demacs:def)) arguments)
  (flet ((is-method (elem)
           (or (eq elem 'method)
               (and (consp elem)
                    (eq (car elem) 'method)))))
    (match (cons operator arguments)
      (('demacs:def (#'is-method elem) (#'function-exists-p gf-name) . rest)
       (let ((gf (fdefinition gf-name)))
         (when (typep gf 'generic-function)
           (with-available-arglist (arglist) (decode-arglist (arglist gf))
             (let ((qualifiers (loop for x in rest
                                  until (or (listp x) (empty-arg-p x))
                                  collect x)))
               (return-from arglist-dispatch
                 (make-arglist :provided-args `(method ,gf-name , at qualifiers)
                               :required-args `(,arglist)
                               :rest "body" :body-p t)))))))
      (_))                              ; Fall through
    )
  (call-next-method))






More information about the slime-devel mailing list