On 2005-dec-09, at 13:55, Hoehle, Joerg-Cyril wrote:
I had a short glance at the CLISP implementation and it immediately struck me that CFFI dislikes CLISP's consistent use of NIL for a NULL FFI pointer. Why?
I'm not sure I dislike it. What I don't like is that CLISP doesn't offer a type that *doesn't* translate between NIL and a FFI pointer.
It's just that it's easy to come up with a type that does the NIL <-> NULL translation out of a raw pointer type.
(defctype :ptr :pointer)
(define-type-translator :ptr :to-c (type value) `(or ,type (null-pointer))
(define-type-translator :ptr :from-c (type value) (with-unique-names (pointer) `(let ((,pointer ,value)) (if (null-pointer-p ,pointer) nil ,pointer))))
IIRC, James deliberately doesn't want to translate between NIL and the NULL pointer because NIL shows up often in error situations. I suppose we could put this alternate type in CFFI for those who like it anyway?