#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)
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.
trampoline
(3), gcc
(1), varargs
(3)
Last modified: 22 October 1997.