Example #1
0
//<===============================================================
static const char *knh_Actor_getOriginalScript(CTX ctx, knh_Array_t *a, const char *actor_name)
{
	int i = 0;
	int asize = a->size;
	const char *script = (const char *)malloc(MAX_SCRIPT_SIZE);
	memset((char *)script, 0, MAX_SCRIPT_SIZE);
	char *scr = (char *)script;
	char src_buf[MAX_SCRIPT_SIZE] = {0};
	const char* pkg_name = "using konoha.actor.*;\n";
	snprintf(scr, MAX_SCRIPT_SIZE, "%s", pkg_name);
	scr += strlen(pkg_name);
	for (i = 0; i < asize; i++) {
		knh_Func_t *fo = (knh_Func_t *)a->list[i];
		knh_Method_t *mtd = fo->mtd;
		const char *mtd_name = knh_getmnname(ctx, mtd->mn);
		const char *type_name = S_tochar(ClassTBL(DP(mtd)->mp->p0.type)->sname);
		const char *arg_name = S_tochar(knh_getFieldName(ctx, DP(mtd)->mp->p0.fn));
		const char *src = S_tochar(fo->mtd->b->tsource->text);
		knh_Actor_addIndent(src_buf, src);
		int wcount = snprintf(scr, MAX_SCRIPT_SIZE - strlen(scr), "\nvoid %s(%s %s)\n{\n%s}\n", mtd_name, type_name, arg_name, src_buf);
		if (wcount < 0) {
			fprintf(stderr, "ERROR: too large script size");
		}
		scr += wcount;
		memset(src_buf, '\0', MAX_SCRIPT_SIZE);
	}
	snprintf(scr, MAX_SCRIPT_SIZE - strlen(scr), "Actor.act(\"%s\");", actor_name);
	return script;
}
Example #2
0
const char* knh_getmnname(CTX, kmethodn_t mn)
{
	mn = MN_toFN(mn);
	if(mn < MN_OPSIZE) {
		return knh_getopname(mn);
	}
	return S_text(knh_getFieldName(_ctx, mn));
}