


TRAMPOLINE(3)                                       TRAMPOLINE(3)


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 func-
       tions.  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  deal-
       located when the creating function returns), while trampo-
       line 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)






                         25 October 1997                        1





TRAMPOLINE(3)                                       TRAMPOLINE(3)


BUGS
       Passing  the  data  through a global variable is not reen-
       trant. 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                        2


