static int pmain (lua_State *L) { (void)L; int n = levee_require (state, "levee.main"); if (n > 0) { lua_pop (L, n); } return 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 }