[plt-scheme] cffi.ss
On Wednesday 25 June 2003 01:19 am, David Van Horn wrote:
> For list-related administrative tasks:
> http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>
> Ed Cavazos wrote:
> > I noticed in the Gambit-C manual that an allowed type specifier in
> > c-lambda is one of: "c-type-id". So, just a string naming a C
> > type. For example, given these 2 C function prototypes:
> >
> > person make_person(char *name);
> > int move_person(person p);
> >
> > I guess the c-lambda code would be:
> >
> > (c-lambda (char-string) "person" "make_person")
> > (c-lambda ("person") int "move_person")
> >
> > It doesn't look like the current cffi.ss supports this. Would adding
> > this be as simple as modifying cffi.ss or would support have to be
> > added to mzc itself?
> >
> > Ed
>
> I believe in Gambit this should be:
>
> (c-define-type person "person")
> (c-lambda (char-string) person "make_person")
> (c-lambda (person) int "move_person")
>
> -d
Yes, you're right. I was smoking crack. I just read in the Gambit-C manual
that what I specified above is prohibited. You have to first use
c-define-type, then c-lambda can accept this type as an arg or return item.
Here's the exact paragraph that mentions this:
"Note that not all of these types can be used in all contexts. In particular
the arguments and result of functions defined with c-lambda and c-define can
not be (struct "name") or (union "name") or "c-type-id". On the other hand,
pointers to these types are acceptable."
So the right thing to do is implement c-define-type and teach c-lambda to
recognize these newly defined types. It's not clear to me how the code
generated by c-lambda and c-declare is communicated back to mzc. Something to
do with the mzc-cffi syntax-property. So I guess that implementing the
c-define-type macro would involve modifying mzc.(?)
Ed