CFFI will not permit uninterned symbols as callback names for CCL, due to this definition in cffi-openmcl.lisp:
(defun intern-callback (name) (intern (format nil "~A::~A" (package-name (symbol-package name)) (symbol-name name)) '#:cffi-callbacks))
where (package-name NIL) signals an error, but CCL doesn't have this restriction. The CCL manual http://ccl.clozure.com/ccl-documentation.html#m_defcallback says merely "name---A symbol which can be made into a special variable" and I have experimentally confirmed that an uninterned symbol is acceptable to CCL:
(let ((foo (make-symbol "FOO")) (arg (make-symbol "ARG"))) `(PROGN (CCL:DEFCALLBACK ,foo (:DOUBLE-FLOAT ,arg :ADDRESS PARAMS :DOUBLE-FLOAT) (LET ((,arg ,arg) (PARAMS PARAMS)) (DECLARE (IGNORE PARAMS)) (BLOCK FOO (ONE-SINE ,arg)))) (SETF (GETHASH 'FOO CFFI-SYS::*CALLBACKS*) (SYMBOL-VALUE ',foo))))
Can this be changed so that uninterned symbols are acceptable, as they are for SBCL?
Thanks, Liam