/* [% proto %] */
typedef struct {[% FOREACH arg IN args %]
[% arg.cdef %];
[%- END %]
[% "${type} retval;" UNLESS type == 'void' %]
} [% structname %];
int [% fwrap %] ( lua_State *L )
{
[% structname %] *data = ([% structname %] *) lua_touserdata( L, -1 );
/* ...remove it from the stack */
lua_pop( L, 1 );
/* call the function; return value in the struct bypassing Lua */
[% "data->retval = " UNLESS type == 'void' %][% lua_funcname -%]( L,
[%- FOREACH arg IN args -%]
data->[%- arg.name -%][%- ", " IF ! loop.last -%] [%- END -%] );
/* return value is ignored as this is called via lua_pcall */
return 0;
}