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)