Man Linux: Main Page and Category List

NAME

       trampoline - closures as first-class C functions

SYNOPSIS

       #include <trampoline.h>

       function = alloc_trampoline(address, variable, data);

       free_trampoline(function);

       is_trampoline(function)
       trampoline_address(function)
       trampoline_variable(function)
       trampoline_data(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(address,  variable, data) allocates a closure. When
       function gets called, it stores data in the variable variable and calls
       the  C function at address.  The function at address is responsible for
       fetching data out of variable  immediately,  before  execution  of  any
       other function call.

       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(function)  is
       called.

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

           trampoline_address(function) returns address,

           trampoline_variable(function) returns variable,

           trampoline_data(function) returns data.

SEE ALSO

       gcc(1), varargs(3), callback(3)

BUGS

       Passing the data through a global variable is not reentrant. Don’t call
       trampoline functions from within signal handlers. This is fixed in  the
       callback(3) package.

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.

                                25 October 1997