Thanks, I'll get on updating my broken eggs soon.

<obvious humpty dumpty joke notwithstanding>

-Dan

On 6/5/2013 2:39 PM, Felix wrote:
From: "pluijzer ." <pluij...@gmail.com>
Subject: [Chicken-users] Chicken C interface
Date: Wed, 5 Jun 2013 17:10:41 +0200

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")))
As written in the other message: C_alloc is just a wrapper around alloca(3),
so returning from the function invalidates or overwrites the data. A later
(minor) garbage collection may actually recover the data, but it is not
certain that it happens. See

   http://api.call-cc.org/doc/foreign/access/foreign-primitive

for a variant that allows stack-allocation.


cheers,
felix

_______________________________________________
Chicken-users mailing list
Chicken-users@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-users


_______________________________________________
Chicken-users mailing list
Chicken-users@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-users

Reply via email to