I do this a fair bit in the Allegro egg.
Here's an example:
https://github.com/dleslie/allegro-egg/blob/985ca2ceef0f5b4028af3f97729f13cba2976fe5/color.scm
Basically, use C_alloc to allocate the memory required to host both the
List structure and the data it is to contain, then use the C_list macro
to patch it all together.
-Dan
On 6/5/2013 8:10 AM, pluijzer . wrote:
Hello everybody,
I was planning to use Chicken Scheme in a fashion more similar to
Guile and Lua. i.e. passing Scheme Data Objects from Chicken to C and
back using the C interface.
I am a little confused though as how to have a C function return a
Scheme List that is seen by the garbage collector.
For example, is the code below correct, will the list be seen by the
garbage collector? And if not, is there correct way to do this.
#>
C_word give_12()
{
C_word *mem = C_alloc(C_SIZEOF_LIST(2));
C_word list = C_list(&mem, 2, C_fix(1), C_fix(2));
return list;
}
<#
(print ((foreign-lambda scheme-object "give_12")))
Also there doesn't seem to be a C_listp predicate. Is this a concious
omission?
thank you in advance,
Richard
_______________________________________________
Chicken-users mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/chicken-users
_______________________________________________
Chicken-users mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/chicken-users