예제 #1
0
파일: regexp.c 프로젝트: SumiTomohiko/Yog
static YogVal
end(YogEnv* env, YogVal self, YogVal pkg, YogVal args, YogVal kw, YogVal block)
{
    SAVE_ARGS5(env, self, pkg, args, kw, block);
    YogVal group = YNIL;
    YogVal retval = YUNDEF;
    PUSH_LOCALS2(env, group, retval);

    YogCArg params[] = { { "|", NULL }, { "group", &group }, { NULL, NULL } };
    YogGetArgs_parse_args(env, "end", params, args, kw);
    CHECK_SELF_MATCH(env, self);

    if (IS_FIXNUM(group)) {
        retval = end_num(env, self, VAL2INT(group));
    }
    else if (IS_NIL(group)) {
        retval = end_num(env, self, 0);
    }
    else if (IS_PTR(group) && (BASIC_OBJ_TYPE(group) == TYPE_STRING)) {
        retval = end_str(env, self, group);
    }
    else {
        raise_invalid_group(env, group);
    }

    RETURN(env, retval);
}
예제 #2
0
파일: regexp.c 프로젝트: SumiTomohiko/Yog
static YogVal
do_match_or_search(YogEnv* env, YogHandle* self, YogHandle* s, YogHandle* pos, YogVal (*f)(YogEnv*, YogHandle*, YogHandle*, int_t))
{
    YogMisc_check_String(env, s, "s");
    YogMisc_check_Fixnum_optional(env, pos, "pos");
    return f(env, s, self, pos == NULL ? 0 : VAL2INT(HDL2VAL(pos)));
}
예제 #3
0
파일: regexp.c 프로젝트: SumiTomohiko/Yog
static YogVal
group(YogEnv* env, YogHandle* self, YogHandle* pkg, YogHandle* group)
{
    CHECK_SELF_MATCH2(env, self);

    if ((group == NULL) || IS_NIL(HDL2VAL(group))) {
        return group_num(env, self, 0);
    }
    if (IS_FIXNUM(HDL2VAL(group))) {
        return group_num(env, self, VAL2INT(HDL2VAL(group)));
    }
    if (IS_PTR(HDL2VAL(group)) && (BASIC_OBJ_TYPE(HDL2VAL(group)) == TYPE_STRING)) {
        return group_str(env, self, group);
    }
    raise_invalid_group(env, HDL2VAL(group));
    return YUNDEF;
}
예제 #4
0
static VALUE ErrorC(VALUE self, VALUE prefix, VALUE num, VALUE text)
{ 
  MqErrorC(MQCTX, VAL2CST(prefix), VAL2INT(num), VAL2CST(text));
  return Qnil;
}