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

_______________________________________________
cffi-devel mailing list
cffi-devel@common-lisp.net
http://common-lisp.net/cgi-bin/mailman/listinfo/cffi-devel

Reply via email to