コード例 #1
0
Object *knh_getSystemConst(Ctx *ctx, int n)
{
	switch(n) {
		case KNH_SYS_CTX:     return (Object*)ctx;
		case KNH_SYS_CTXIN:   return (Object*)((ctx)->in);
		case KNH_SYS_CTXOUT:  return (Object*)((ctx)->out);
		case KNH_SYS_CTXERR:  return (Object*)((ctx)->err);
		case KNH_SYS_STDIN:   return (Object*)(DP((ctx)->sys)->in);
		case KNH_SYS_STDOUT:  return (Object*)(DP((ctx)->sys)->out);
		case KNH_SYS_STDERR:  return (Object*)(DP((ctx)->sys)->err);
		case KNH_SYS_OS:      return (Object*)knh_getClassDefaultValue(ctx, CLASS_System);
		case KNH_SYS_SCRIPT:  return (Object*)ctx->script;
	}
	DBG_P("unknown system const n=%d", n);
	return KNH_NULL;
}
コード例 #2
0
ファイル: stringapi.c プロジェクト: matsuu/konoha
Array *knh_Regex_split(Ctx *ctx, Regex *o, String *s)
{
	char *str = knh_String_tochar(s);
	knh_regmatch_t pmatch[KNH_REGEX_NMATCH_SIZE];
	int res = o->df->regexec(ctx, o->reg, str, KNH_REGEX_NMATCH_SIZE, pmatch, 0);
	if(res == 0) {
		Array *a = new_Array(ctx, CLASS_String, KNH_REGEX_NMATCH_SIZE);
		knh_bytes_t sub = knh_String_tobytes(s);
		int i;
		for(i = 1; i < KNH_REGEX_NMATCH_SIZE; i++) {
			if(pmatch[i].rm_so == -1) break;
			//DBG_P("[%d], rm_so=%d, rm_eo=%d", i, pmatch[i].rm_so, pmatch[i].rm_eo);
			sub.buf = (knh_uchar_t*)str + pmatch[i].rm_so;
			sub.len = pmatch[i].rm_eo - pmatch[i].rm_so;
			knh_Array_add(ctx, a, UP(new_String(ctx, sub, s)));
		}
		return a;
	}
	else {
		return (Array*)knh_getClassDefaultValue(ctx, ACLASS_String);
		//return (Array*)KNH_NULL;
	}
}