When used with Clozure, the #'operator-arglist slimefun incorrectly does not return NIL for unbound functions:
(fboundp 'cl::bogus) => NIL
(swank:operator-arglist "BOGUS" "COMMON-LISP") => "(BOGUS )"
The interface function #'arglist (called by #'swank:operator-arglist) is documented to return "the :not-available keyword if the arglist cannot be determined". However:
(swank::arglist 'cl::bogus) => NIL
The fix is to make the arglist function of the Clozure backend return :not-available when there is no binding:
diff -u slime-2009-06-29/swank-openmcl.lisp patch/swank-openmcl.lisp --- slime-2009-06-29/swank-openmcl.lisp 2009-06-29 00:15:06.000000000 -0700 +++ patch/swank-openmcl.lisp 2009-06-29 15:04:51.000000000 -0700 @@ -206,7 +206,11 @@ ;;; Arglist
(defimplementation arglist (fname) - (arglist% fname)) + (multiple-value-bind (arglist binding) + (arglist% fname) + (if binding + arglist + :not-available)))
(defmethod arglist% ((f symbol)) (ccl:arglist f))
-- Terje Norderhaug
Terje Norderhaug terje@in-progress.com writes:
When used with Clozure, the #'operator-arglist slimefun incorrectly does not return NIL for unbound functions:
(fboundp 'cl::bogus) => NIL
(swank:operator-arglist "BOGUS" "COMMON-LISP") => "(BOGUS )"
The interface function #'arglist (called by #'swank:operator-arglist) is documented to return "the :not-available keyword if the arglist cannot be determined". However:
(swank::arglist 'cl::bogus) => NIL
The fix is to make the arglist function of the Clozure backend return :not-available when there is no binding:
Thanks, committed.