Proto *kp_newproto(ktap_State *ks) { Proto *f; f = (Proto *)kp_newobject(ks, KTAP_TPROTO, sizeof(*f), NULL); f->k = NULL; f->sizek = 0; f->p = NULL; f->sizep = 0; f->code = NULL; f->cache = NULL; f->sizecode = 0; f->lineinfo = NULL; f->sizelineinfo = 0; f->upvalues = NULL; f->sizeupvalues = 0; f->numparams = 0; f->is_vararg = 0; f->maxstacksize = 0; f->locvars = NULL; f->sizelocvars = 0; f->linedefined = 0; f->lastlinedefined = 0; f->source = NULL; return f; }
static ktap_btrace *kp_newbacktrace(ktap_state *ks, ktap_gcobject **list) { ktap_btrace *bt; bt = &kp_newobject(ks, KTAP_TBTRACE, sizeof(ktap_btrace), list)->bt; return bt; }
ktap_btrace *kp_newbacktrace(ktap_state *ks) { ktap_btrace *bt; bt = &kp_newobject(ks, KTAP_TBTRACE, sizeof(ktap_btrace), NULL)->bt; return bt; }
static Udata *newudata(ktap_State *ks, size_t s) { Udata *u; u = &kp_newobject(ks, KTAP_TUSERDATA, sizeof(Udata) + s, NULL)->u; u->uv.len = s; return u; }
Upval *kp_newupval(ktap_State *ks) { Upval *uv; uv = &kp_newobject(ks, KTAP_TUPVAL, sizeof(Upval), NULL)->uv; uv->v = &uv->u.value; setnilvalue(uv->v); return uv; }
static ktap_btrace *kp_newbacktrace(ktap_state *ks, int nr_entries, ktap_gcobject **list) { ktap_btrace *bt; int size = sizeof(ktap_btrace) + nr_entries * sizeof(unsigned long); bt = &kp_newobject(ks, KTAP_TBTRACE, size, list)->bt; bt->nr_entries = nr_entries; return bt; }
Closure *kp_newlclosure(ktap_State *ks, int n) { Closure *cl; cl = (Closure *)kp_newobject(ks, KTAP_TLCL, sizeof(*cl), NULL); cl->l.p = NULL; cl->l.nupvalues = n; while (n--) cl->l.upvals[n] = NULL; return cl; }
Table *kp_table_new(ktap_State *ks) { Table *t = &kp_newobject(ks, KTAP_TTABLE, sizeof(Table), NULL)->h; t->flags = (u8)(~0); t->array = NULL; t->sizearray = 0; t->node = (Node *)dummynode; setnodevector(ks, t, 0); return t; }
static ktap_upval *findupval(ktap_state *ks, StkId level) { ktap_global_state *g = G(ks); ktap_gcobject **pp = &ks->openupval; ktap_upval *p; ktap_upval *uv; while (*pp != NULL && (p = gco2uv(*pp))->v >= level) { if (p->v == level) { /* found a corresponding upvalue? */ return p; } pp = &p->next; } /* not found: create a new one */ uv = &kp_newobject(ks, KTAP_TUPVAL, sizeof(ktap_upval), pp)->uv; uv->v = level; /* current value lives in the stack */ uv->u.l.prev = &g->uvhead; /* double link it in `uvhead' list */ uv->u.l.next = g->uvhead.u.l.next; uv->u.l.next->u.l.prev = uv; g->uvhead.u.l.next = uv; return uv; }