Beispiel #1
0
static int
pmain (lua_State *L)
{
	(void)L;
	int n = levee_require (state, "levee.main");
	if (n > 0) {
		lua_pop (L, n);
	}
	return 0;
}
Beispiel #2
0
void
levee_push_sender (Levee *self, LeveeChanSender *sender)
{
	if (self->state != LEVEE_LOCAL) return;

	// put ffi module on the stack
	levee_require (self, "ffi"); // stack: ffi

	// get ffi.C.levee_chan_sender_ref
	lua_getfield (self->L, -1, "C"); // stack: ffi C
	lua_getfield (self->L, -2, "gc"); // stack: ffi C gc
	lua_getfield (self->L, -2, "levee_chan_sender_ref"); // stack: ffi C gc ref

	// call ffi.C.levee_chan_sender_ref(sender)
	lua_pushlightuserdata (self->L, sender); // stack: ffi C gc ref sender
	lua_call (self->L, 1, 1); // stack: ffi C gc sender

	// call ffi.gc(sender, ffi.C.levee_chan_sender_unref)
	lua_getfield (self->L, -3, "levee_chan_sender_unref"); // stack: ffi C gc sender unref
	lua_call (self->L, 2, 1); // stack: ffi C sender

	lua_remove (self->L, -2); // stack: ffi sender
	lua_remove (self->L, -2); // stack: sender
}