[MLton-user] nlffi struct or union arguments
Matthew Fluet
fluet@cs.cornell.edu
Tue, 13 Jun 2006 07:47:36 -0400 (EDT)
> MLton's mlnlffigen does not currently support C functions with struct or
> union arguments.
Correct. The difficulty is that different platforms have different
conventions for passing struct/union arguments and not all of these can
(easily) be desugared into MLton's FFI.
> I'm making the assumption that this means it _will_ support pointers to
> structs or unions.
Correct.
> It's been so long since I used C, I can't remember that you could actually do
> something like :
>
> struct {
> ...
> } foo;
>
> func(foo);
>
> instead of
>
> func (&foo);
Both function calls are allowed in C, though they have different
semantics. The first will pass a copy of the struct foo, so any
assignments to the struct fields in func won't be seen by the caller. The
second will pass a pointer to the struct foo, so assignments will be seen
by the caller.
> So annoying function calls which used structs/unions directly could simply be
> recoded with pointers... ?
Yes, but the penalty is introducing a wrapper C function. For example:
typedef struct foo { ... };
void func(struct foo);
void wrap_func(struct foo *p) {
func(*p);
}