Skip to content

function-lambda-list fails for funcallables (other than GFs)

Using ext:function-lambda-list on a funcallable-standard-object that is not a generic function results in an incorrect type error: "[whatever] is not of type FUNCTION." This seems to be because f-l-l calls ext:compiled-function-name, which trips that error on FSOs (as they are functions but not compiled-functions).

This problem makes using FSOs in SLIME frustrating, because SWANK uses f-l-l to get lambda lists.

Reproducer:

(defclass testf (clos:funcallable-standard-object)
  ()
  (:metaclass clos:funcallable-standard-class))
(ext:function-lambda-list (make-instance 'testf)) ; => error

Version info (this is ECL from the Debian repos):

     VERSION "21.2.1"
      VCS-ID "UNKNOWN"
          OS "Linux"
  OS-VERSION "6.0.0-6-amd64"
MACHINE-TYPE "x86_64"
    FEATURES (:WALKER :CDR-1 :CDR-5 :LINUX :FORMATTER :CDR-7 :ECL-WEAK-HASH
              :LITTLE-ENDIAN :ECL-READ-WRITE-LOCK :LONG-LONG :UINT64-T
              :UINT32-T :UINT16-T :COMPLEX-FLOAT :LONG-FLOAT :UNICODE :DFFI
              :CLOS-STREAMS :CMU-FORMAT :UNIX :ECL-PDE :DLOPEN :CLOS :THREADS
              :BOEHM-GC :ANSI-CL :COMMON-LISP :FLOATING-POINT-EXCEPTIONS
              :IEEE-FLOATING-POINT :PACKAGE-LOCAL-NICKNAMES :CDR-14
              :PREFIXED-API :FFI :X86_64 :COMMON :ECL)