On Tue, 2012-05-01 at 00:00 +0400, Stas Boukarev wrote: > Stas Boukarev <stass...@gmail.com> writes: > > > Stelian Ionescu <sione...@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
signature.asc
Description: This is a digitally signed message part
_______________________________________________ cffi-devel mailing list cffi-devel@common-lisp.net http://lists.common-lisp.net/cgi-bin/mailman/listinfo/cffi-devel