//<=============================================================== 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; }
static void ClassCONST_man(CTX ctx, knh_OutputStream_t *w, const knh_ClassTBL_t *ct, knh_NameSpace_t *ns) { knh_DictMap_t *tcmap = ct->constDictCaseMapNULL; size_t i, size = knh_DictMap_size(tcmap); int hasCaption = 0; for(i = 0; i < size; i++) { if(!hasCaption) { knh_write_ctext(ctx, w, _("CONST")); hasCaption = 1; } knh_printf(ctx, w, "\t%s.%s: %O\n", S_tochar(ct->sname), S_tochar(knh_DictMap_keyAt(tcmap, i)), knh_DictMap_valueAt(tcmap, i)); } if(hasCaption == 1) { knh_write_EOL(ctx, w); } }
static void knh_write_Method(CTX ctx, knh_OutputStream_t *w, const knh_ClassTBL_t *ct, knh_Method_t *o) { knh_write_TAB(ctx, w); if(Method_isAbstract(o)) { knh_write_ascii(ctx, w, "@Abstract "); } knh_write_type(ctx, w, knh_type_tocid(ctx, knh_ParamArray_rtype(DP(o)->mp), ct->cid)); knh_putc(ctx, w, ' '); if(Method_isStatic(o)) { knh_write_ascii(ctx, w, S_tochar(ct->sname)); knh_putc(ctx, w, '.'); } knh_write_mn(ctx, w, SP(o)->mn); knh_putc(ctx, w, '('); size_t i; for(i = 0; i < knh_Method_psize(o); i++) { knh_param_t *p = knh_ParamArray_get(DP(o)->mp, i); if(i > 0) { knh_write_delim(ctx, w); } knh_write_type(ctx, w, knh_type_tocid(ctx, p->type, ct->cid)); knh_putc(ctx, w, ' '); knh_write_ascii(ctx, w, FN__(p->fn)); } if(ParamArray_isVARGs(DP(o)->mp)) { knh_write_delim(ctx, w); knh_write_dots(ctx, w); } knh_putc(ctx, w, ')'); knh_write_EOL(ctx, w); }
void KTexture::setClassID(CTX ctx) { knh_ClassTBL_t *ct = NULL; knh_ClassTBL_t *mouse_event_ct = NULL; const knh_ClassTBL_t **cts = ctx->share->ClassTBL; size_t size = ctx->share->sizeClassTBL; for (size_t i = 0; i < size; i++) { if (!strncmp("Texture", S_tochar(cts[i]->sname), sizeof("Texture"))) { ct = (knh_ClassTBL_t *)cts[i]; } else if (!strncmp("MouseEvent", S_tochar(cts[i]->sname), sizeof("MouseEvent"))) { mouse_event_ct = (knh_ClassTBL_t *)cts[i]; } } if (ct == NULL) fprintf(stderr, "ERROR: UNKNOWN CLASS: Texture\n"); if (mouse_event_ct == NULL) fprintf(stderr, "ERROR: UNKNOWN CLASS: MouseEvent\n"); cid = ct->cid; mouse_event_cid = mouse_event_ct->cid; }
static void knh_Actor_readMessage(CTX ctx, knh_Actor_t *a, knh_Object_t *o) { //fprintf(stderr, "readMessage\n"); knh_Object_t **v = ((knh_ObjectField_t *)o)->fields; knh_String_t *s = (knh_String_t *)v[0]; const char *mtd_name = S_tochar(s); //fprintf(stderr, "mtd_name = %s\n", mtd_name); knh_Object_t *msg = v[1]; //fprintf(stderr, "msg = %p\n", msg); //fprintf(stderr, "sname = %s\n", S_tochar(msg->h.cTBL->sname)); knh_Actor_invokeMethod(ctx, a, mtd_name, msg); }
knh_InputStream_t* new_StringInputStream(Ctx *ctx, knh_String_t *str, size_t s, size_t e) { knh_InputStream_t* o = new_(InputStream); DP(o)->fd = IO_NULL; DBG_ASSERT(IS_String(str)); KNH_SETv(ctx, DP(o)->str, str); DP(o)->buf = (char*)S_tochar(str); DP(o)->bufsiz = S_size(str); DBG_ASSERT(e <= S_size(str)); DBG_ASSERT(s <= e); DP(o)->bufpos = s; DP(o)->bufend = e; return o; }
static knh_String_t *Gamma_vperror(CTX ctx, int pe, const char *fmt, va_list ap) { knh_String_t *msg = TS_EMPTY; int isPRINT = (pe <= KC_DWARN) ? 1 : 0; if(pe != KC_DEBUG && (CTX_isInteractive(ctx) || knh_isCompileOnly(ctx))) { isPRINT = 1; } if(Gamma_isQuiet(ctx->gma) || ctx->gma->uline == 0) { isPRINT = 0; } //DBG_P("/*isPRINT=%d*/ uline=%d", isPRINT, ctx->gma->uline); if(isPRINT == 1) { knh_cwb_t cwbbuf, *cwb = knh_cwb_open(ctx, &cwbbuf); knh_write_uline(ctx, cwb->w, ctx->gma->uline); knh_write_ascii(ctx, cwb->w, KC__(pe)); knh_vprintf(ctx, cwb->w, fmt, ap); msg = knh_cwb_newString(ctx, cwb); knh_Array_add(ctx, DP(ctx->gma)->errmsgs, msg); fprintf(stderr, "%s - %s%s\n", TERM_BNOTE(ctx, pe), S_tochar(msg), TERM_ENOTE(ctx, pe)); } return msg; }