[cffi-devel] Next release of CFFI with cffi-libffi

Stas Boukarev stassats at gmail.com
Thu Apr 19 14:46:53 UTC 2012


Luís Oliveira <luismbo <at> gmail.com> writes:

> 
> On Thu, Apr 19, 2012 at 2:50 PM, Stelian Ionescu <sionescu <at> cddr.org> 
wrote:
> > (with-foreign-object (p '(:struct timespec) 2)
> >  (mem-aref p '(:struct timespec) 1))
> >
> > In order not to break existing code [...]
> 
> Existing code will not have this (:struct foo) syntax because it was
> introduced by the libffi merge. (mem-aref p 'timespec 1) should
> exhibit backwards-compatible behaviour.
Turns out, the problem is not with mem-aref, but with the mem-aref compile-
macro. It binds *parse-bare-structs-as-pointers* to T, whereas mem-aref function 
doesn't, this affects the result of foreign-type-size.

(cffi:defcstruct foo
  (classid :short)
  (name :short)
  (methodid :short))(cffi:defcstruct foo
  (classid :short)
  (name :short)

(cffi:foreign-type-size 'foo)
=> 6

(let ((cffi::*parse-bare-structs-as-pointers* t))
  (cffi:foreign-type-size 'foo))
=> 8





More information about the cffi-devel mailing list