On 2005-dec-21, at 18:48, Hoehle, Joerg-Cyril wrote:
Luis, here's the patch for you. How do people submit shorter patches? Most of the 40KB is the "context" that darcs appends.
darcs diff will produce a short patch. Alternatively, puting your darcs tree somewhere where anyone can pull patches from is quite convenient.
Your mail to 'cffi-devel' with the subject
first clisp-specific patch
Is being held until the list moderator can review it for approval.
It'd be nice if cffi-devel wasn't moderated at all (namely, this would allow anyone to post via gmane.lisp.cffi.devel), but I suppose it would get a lot of spam?
-----Ursprüngliche Nachricht----- Von: Höhle, Jörg-Cyril Gesendet: Mittwoch, 21. Dezember 2005 17:58 An: cffi-devel@common-lisp.net Betreff: first clisp-specific patch
Hi,
I used darcs pull /home/src/cffi-luis to create a local copy, experiment a little with record and revert. darcs unrecord seems to be good enough to cancel my patch that conflicted with the recent changes to types.lisp.
The current patch set is appended. I'd like to add more. The 96 tests pass. The patches are: ffi:memory-as is a perfect match for %mem-ref
Sure, sure. We would have used it if it were documented. ;-)
use ffi:foreign-variable in foreign-symbol-pointer foreign-slot-value|set compiler-macro update cffi-clisp:%defcallback: simplify it Add background info on free'ing callbacks
Regarding this comment:
;; The created callback function is not stack-allocated. + ;; It is valid until (ffi:foreign-free #<FOREIGN-FUNCTION>), + ;; but you can't use (ffi:foreign-free (callback name)), + ;; because that would invoke free() on the opaque c-pointer! + ;; Maybe cffi should make an exception and use the + ;; foreign-function object, not its address?
I think the question whether (ffi:foreign-free (callback name)) works is pretty irrelevant since if people used that, the bindings wouldn't be portable anymore.
However I suppose cffi-clisp's %defcallback should free the previous callback with the same name (maybe this is what you're thinking about). Something like this?
+ (let ((cb-fun (get ',name 'clisp-callback-function))) + (when cb-fun (ffi:foreign-free cb-fun))) + (setf (get ',name 'clisp-callback-function) ,cb-var) (setf (get ',name 'callback-ptr) (ffi:foreign-address ,cb-var)))))
BTW, cffi-gcl does not reflect the recent renaming fiesta (null-ptr- p etc.).
The GCL port has never been complete. I guess it'll have to wait either for someone who actually uses GCL to pick it up or for more important stuff to get finished first.
Further simple patches could cover possible performance optimizations, or whatever.
Regards & happy new year, Jörg Höhle.
<Joerg.patch>
Btw, I have a question about CLISP's licensing. Quoting from CLISP's COPYRIGHT file:
"This copyright does *not* cover user programs that run in CLISP and third-party packages not part of CLISP, if a) They only reference external symbols in CLISP's public packages (namely the packages COMMON-LISP, COMMON-LISP-USER, KEYWORD, CLOS, GRAY, EXT), i.e. if they don't rely on CLISP internals and would as well run in any other Common Lisp implementation. Or b) They only reference external symbols in CLISP's public packages (namely the packages COMMON-LISP, COMMON-LISP-USER, KEYWORD, CLOS, GRAY, EXT) and some external, not CLISP specific, symbols in third-party packages that are released with source code under a GPL compatible license and that run in a great number of Common Lisp implementations, i.e. if they rely on CLISP internals only to the extent needed for gaining some functionality also available in a great number of Common Lisp implementations."
Since my legalese skills are weak specially in English I'm not even sure which of these two exceptions apply to CFFI. However, both talk about referencing external symbols only and cffi-clisp.lisp references a few internal symbols.
My question is: does this mean CFFI (the whole CFFI?) would have to be licensed under the GPL? If so, could these symbols CFFI uses be exported? I'm certain relicensing CFFI under GPL would not be an option.
Anyway, thanks for your patch and merry christmas!