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

Stelian Ionescu sionescu at cddr.org
Mon Apr 30 21:29:13 UTC 2012


On Tue, 2012-05-01 at 00:00 +0400, Stas Boukarev wrote:
> Stas Boukarev <stassats at gmail.com> writes:
> 
> > Stelian Ionescu <sionescu at cddr.org> writes:
> >
> >> On Thu, 2012-04-19 at 14:46 +0000, Stas Boukarev wrote:
> >>> 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.
> >>
> >> Actually it's mem-aref that should bind *parse-bare-structs-as-pointers*
> >> to T, so I pushed the fix
> >
> > This breaks it.
> And the same problem with *parse-bare-structs-as-pointers* being
> different is also present in the setf macro for mem-aref.

Ok, I reverted that patch because it's now obvious that I misunderstood
the problem, the bug seems to be in the compiler-macro:

CFFI> (cffi:defcstruct foo
        (a :uint8))
=> (:STRUCT FOO)
CFFI> (cffi:with-foreign-object (var 'foo 2)
        (declare (inline mem-aref))
        (- (cffi-sys:pointer-address (cffi:mem-aref var 'foo 1))
           (cffi-sys:pointer-address (cffi:mem-aref var 'foo 0))))
=> 8
CFFI> (cffi:with-foreign-object (var 'foo 2)
        (declare (notinline mem-aref))
        (- (cffi-sys:pointer-address (cffi:mem-aref var 'foo 1))
           (cffi-sys:pointer-address (cffi:mem-aref var 'foo 0))))
=> 1

-- 
Stelian Ionescu a.k.a. fe[nl]ix
Quidquid latine dictum sit, altum videtur.
http://common-lisp.net/project/iolib

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part
URL: <https://mailman.common-lisp.net/pipermail/cffi-devel/attachments/20120430/ec5d2f9f/attachment.sig>


More information about the cffi-devel mailing list