예제 #1
0
파일: kp_obj.c 프로젝트: WinLinKer/ktap
ktap_proto *kp_obj_newproto(ktap_state *ks)
{
	ktap_proto *f;
	f = (ktap_proto *)kp_obj_newobject(ks, KTAP_TYPE_PROTO, 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
파일: kp_obj.c 프로젝트: WinLinKer/ktap
ktap_upval *kp_obj_newupval(ktap_state *ks)
{
	ktap_upval *uv;

	uv = &kp_obj_newobject(ks, KTAP_TYPE_UPVAL, sizeof(ktap_upval), NULL)->uv;
	uv->v = &uv->u.value;
	set_nil(uv->v);
	return uv;
}
예제 #3
0
파일: cdata.c 프로젝트: ktap/ktap
ktap_cdata_t *kp_cdata_new(ktap_state_t *ks, csymbol_id id)
{
	ktap_cdata_t *cd;

	cd = &kp_obj_newobject(ks, KTAP_TYPE_CDATA, sizeof(ktap_cdata_t), NULL)->cd;
	cd_set_csym_id(cd, id);

	return cd;
}
예제 #4
0
파일: kp_obj.c 프로젝트: WinLinKer/ktap
static ktap_btrace *kp_obj_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_obj_newobject(ks, KTAP_TYPE_BTRACE, size, list)->bt;
	bt->nr_entries = nr_entries;
	return bt;
}
예제 #5
0
파일: kp_obj.c 프로젝트: WinLinKer/ktap
ktap_closure *kp_obj_newclosure(ktap_state *ks, int n)
{
	ktap_closure *cl;
	int size = sizeof(ktap_closure) + sizeof(ktap_upval *) * (n - 1);

	cl = (ktap_closure *)kp_obj_newobject(ks, KTAP_TYPE_CLOSURE, size, NULL);
	cl->p = NULL;
	cl->nupvalues = n;
	while (n--)
		cl->upvals[n] = NULL;

	return cl;
}
예제 #6
0
파일: kp_obj.c 프로젝트: WinLinKer/ktap
/*
 * allocate raw object with size.
 * The raw object allocated will be free when ktap thread exit,
 * so user don't have to free it.
 */
void *kp_rawobj_alloc(ktap_state *ks, int size)
{
	ktap_rawobj *obj;
	void *addr;
	
	addr = kp_zalloc(ks, size);
	if (unlikely(!addr)) {
		kp_error(ks, "alloc raw object size %d failed\n", size);
		return NULL;
	}

	obj = &kp_obj_newobject(ks, KTAP_TYPE_RAW, sizeof(ktap_rawobj), NULL)->rawobj;
	if (unlikely(!obj)) {
		kp_free(ks, addr);
		kp_error(ks, "alloc raw object failed\n");
		return NULL;
	}

	obj->v = addr;

	/* return address of allocated memory, not raw object */
	return addr;
}