//<=============================================================== 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; }
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)); }