void rstack_link (lua_State *L, GCObject *o, lu_byte tt) { RStack *rs = rstack(L); o->gch.tt = tt; o->gch.next = NULL; o->gch.marked = luaC_white(G(L)); l_setbit(o->gch.marked, FIXEDBIT); set_regnum(o, rs->cregnum); }
int main(int argc, char** argv) { rstack(); if(argc != 2) { printf("usage: %s <signo>\n", argv[0]); } func3(atoi(argv[1])); return 0; }
void rstack_init (lua_State *L) { RStack *rs = rstack(L); rs->state = L; rs->rbuf.head = rs->rbuf.last = NULL; rs->rbuf.size = 0; buf_resize(L, rs, RStack_MINBUFSIZE); rs->cregnum = 0; rs->creg = rs->regions; rs->creg->top = rs->creg->base = rs->rbuf.head; }
void *rstack_alloc (lua_State *L, size_t size) { RStack *rs = rstack(L); Region *r = check_exp(rs->cregnum > 0, rs->creg); RObject *top = r->top; if (top == rs->rbuf.last) { RObject *ohead = rs->rbuf.head; buf_resize(L, rs, rs->rbuf.size * 2); buf_fix(rs, ohead); top = r->top; } top->body = luaM_malloc(L, size); ++r->top; return top->body; }
void rstack_reject (lua_State *L, GCObject *src) { RStack *rs = rstack(L); RObject *robj = rstack_getrobj(rs, src); lua_assert(robj && src == robj->body); luaC_link(L, src, src->gch.tt); switch(src->gch.tt) { case LUA_TTABLE: luaH_reject(L, gco2h(src)); break; case LUA_TUSERDATA: luaS_rejectu(L, rawgco2u(src)); break; // TODO: implement default: lua_assert(0); } robj->body = NULL; }
void rstack_close (lua_State *L) { RStack *rs = rstack(L); lua_assert(rs->cregnum == 0); lua_assert(rs->creg->top == rs->rbuf.head); buf_resize(L, rs, 0); }
int main() { rstack(); return f2(); }