On Thu, Jun 6, 2013 at 11:34 AM, Thomas Chust <ch...@web.de> wrote:

> On 2013-06-05 23:36, Felix wrote:
> > From: Dan Leslie <d...@ironoxide.ca>
> >> [...]
> >> 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.
> >
> > Note that this code is not correct: C_alloc allocates on the C stack and
> the
> > data will be invalid once the function returns (Sorry). If this works,
> then
> > it is just coincidental!
> > [...]
>
> Hello,
>
> when I first saw that code I thought that this must be incorrect, too.
> Then I checked the CHICKEN documentation for foreign-safe-lambda and read:
>
>   "This is similar to foreign-lambda, but also allows the called
>    function to call Scheme functions and allocate Scheme data-objects."
>
> Now I'm confused. Of course C_alloc allocates on the stack and of course
> this can likely break if a function just returns some pointer to stack
> allocated data. However C_return could magically copy the return value
> to the second generation heap or similar trickery to actually make
> foreign-safe-lambda and C_alloc interoperate correctly or one could
> perhaps use a special call ABI to prevent stack corruption upon return
> from a foreign-safe-lambda and salvage stack allocated objects. Is any
> such strategy actually implemented?
>

>From what I understand, this is exactly what foreign-primitive does: wraps
C_return in a CPS, keeping the stack-allocation alive. I posted a question
on a similar topic a while back:
http://lists.gnu.org/archive/html/chicken-users/2012-03/msg00034.html

K.



>
> But maybe the documentation is just misleading and wanted to say
> something about temporary allocation for the lifetime of the function
> instead.
>
> Ciao,
> Thomas
>
>
> --
> When C++ is your hammer, every problem looks like your thumb.
>
>
> _______________________________________________
> 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