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; }
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; } }