Has anyone of you given a look at what Franz did on this very subject for their Allegro 8.2
(http://www.franz.com/support/documentation/8.2/doc/contents.htm#foreign-functions)
(http://www.franz.com/support/documentation/8.2/doc/foreign-functions.htm#structs-by-value-1)
They added a keyword argument to their def-foreign-call form and also added
a global variable ff:*pass-structs-by-value* that controls the default value of the keyword arg.

What do you think of that?

Cheers,

Jean-Claude Beaudoin

On Thu, Sep 8, 2011 at 1:05 PM, Luís Oliveira <luismbo@gmail.com> wrote:
On Thu, Sep 8, 2011 at 5:56 PM, Liam Healy <lnp@healy.washington.dc.us> wrote:
> I see this is a simple change to the function call interface: naming
> the struct means call by value; if you want to call by reference, use
> :pointer.

That's Attila's suggestion. Break it and move on.


> We can even make a warning if you call by reference with
> the struct name and don't have FSBV loaded (remember we are going to
> keep this a separate system so that users don't have to load libffi if
> they don't need call by value).

That's nicer, but fsbv might be loaded for some other reason and thus
silently break existing code.


> So this is an incompatible change to
> the call interface, essentially revoking CFFI's prior generosity in
> allowing structure name instead of :pointer.  I definitely don't like
> the idea of making different defcstructs, that will be too confusing
> and a kludge.

Just to be clear, the older defcstruct would become deprecated,
removed from the user manual, etc.

--
Luís Oliveira
http://r42.eu/~luis/

_______________________________________________