Exemple #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;
}
Exemple #2
0
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);
	}
}
Exemple #3
0
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);
}
Exemple #4
0
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;
}
Exemple #5
0
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;
}
Exemple #7
0
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;
}