Provided by: libffcall1-dev_1.10+cvs20100619-3_amd64 bug

NAME

       trampoline - closures as first-class C functions

SYNOPSIS

       #include <trampoline_r.h>

       function = alloc_trampoline_r(address, data0, data1);

       free_trampoline_r(function);

       is_trampoline_r(function)
       trampoline_r_address(function)
       trampoline_r_data0(function)
       trampoline_r_data1(function)

DESCRIPTION

       These  functions  implement  closures as first-class C functions.  A closure consists of a
       regular C function and a piece of data which gets  passed  to  the  C  function  when  the
       closure is called.

       Closures as first-class C functions means that they fit into a function pointer and can be
       called exactly like any other C function.  function =  alloc_trampoline_r(address,  data0,
       data1)  allocates  a  closure.  When function gets called, it stores in a special "lexical
       chain register" a pointer to a storage area containing data0 in its first word  and  data1
       in  its  second  word  and  calls  the  C function at address.  The function at address is
       responsible for fetching data0 and data1 off the pointer. Note  that  the  "lexical  chain
       register" is a call-used register, i.e. is clobbered by function calls.

       This  is  much  like  gcc's  local  functions,  except that the GNU C local functions have
       dynamic extent (i.e. are deallocated when the creating function returns), while trampoline
       provides   functions   with   indefinite   extent:   function  is  only  deallocated  when
       free_trampoline_r(function) is called.

       is_trampoline_r(function) checks whether the C function function was produced by a call to
       alloc_trampoline_r.   If  this returns true, the arguments given to alloc_trampoline_r can
       be retrieved:

           trampoline_r_address(function) returns address,

           trampoline_r_data0(function) returns data0,

           trampoline_r_data1(function) returns data1.

SEE ALSO

       trampoline(3), gcc(1), varargs(3)

PORTING

       The  way  gcc  builds  local  functions   is   described   in   the   gcc   source,   file
       gcc-2.6.3/config/cpu/cpu.h.

AUTHOR

       Bruno Haible <bruno@clisp.org>

ACKNOWLEDGEMENTS

       Many ideas were cribbed from the gcc source.

                                         22 October 1997                            TRAMPOLINE(3)