Hi there,
I've been lurking here for a couple of weeks to see how cffi is progressing. It looks good so far!
On Sun, 4 Sep 2005 20:03:54 +0100, Luis Oliveira luismbo@gmail.com said:
Luis> CFFI> (foreign-alloc :int :initial-contents #(1 2 3)) Luis> #<A Mac Pointer #x1022E0> Luis> CFFI> (loop for i from 0 below 3 Luis> collect (mem-ref * :int i)) Luis> (1 2 3)
Luis> ;; Another note: what should should be in (mem-ref ** :int 3)? Luis> ;; Zero? Ie. Should these previous two calls to foreign-alloc Luis> ;; allocate 3*sizeof(int) or 4*sizeof(int) bytes? Lispworks seems to Luis> ;; do the latter.
LispWorks allocates 3*sizeof(int), but the C heap manager might round this up to 4. (mem-ref ** :int 3) should be expected to give a random result or a crash.
Luis> CFFI> (foreign-alloc :string :initial-element "foo") Luis> ;; I think this should do something similar to CLISP's Luis> ;; FFI:ALLOCATE-DEEP, and it should Just Work if we apply the :to-c Luis> ;; translator, which will allocate space for "foo".
I think it depends on whether the :STRING type is an array type, a pointer type or some magic.
Luis> ;; A problem here is freeing this memory. Should we tell the user Luis> ;; he has to free the complex stuff inside by himself. Or should we Luis> ;; come up with something similar to CLISP's FFI:FOREIGN-FREE when Luis> ;; passed ":full t". (In this case CFFI:FOREIGN-FREE would have to Luis> ;; take an optional type or something to describe what needs Luis> ;; freeing.)
Complex stuff is complex to free, so I would say that the user has to do it.