Пример #1
0
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;
}
Пример #2
0
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;
}
Пример #3
0
ktap_btrace *kp_newbacktrace(ktap_state *ks)
{
	ktap_btrace *bt;

	bt = &kp_newobject(ks, KTAP_TBTRACE, sizeof(ktap_btrace), NULL)->bt;
	return bt;
}
Пример #4
0
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;
}
Пример #5
0
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;
}
Пример #6
0
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;
}
Пример #7
0
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;
}
Пример #8
0
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;
}
Пример #9
0
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;
}