diff options
| author | Yukihiro Matsumoto <[email protected]> | 2012-05-09 08:49:38 +0900 |
|---|---|---|
| committer | Yukihiro Matsumoto <[email protected]> | 2012-05-09 08:49:38 +0900 |
| commit | f4cf8ea423d8f9df1d341adba63d1416779aae8a (patch) | |
| tree | ee89b697760d7b528d4767c4ccd1534dadf42bc0 /src/re.c | |
| parent | 2e4e7f7cd15e8ccd6bc6bf8608e0f167f68e2a22 (diff) | |
| download | mruby-f4cf8ea423d8f9df1d341adba63d1416779aae8a.tar.gz mruby-f4cf8ea423d8f9df1d341adba63d1416779aae8a.zip | |
partial VC support
Diffstat (limited to 'src/re.c')
| -rw-r--r-- | src/re.c | 29 |
1 files changed, 19 insertions, 10 deletions
@@ -85,9 +85,9 @@ mrb_reg_s_new_instance(mrb_state *mrb, /*int argc, mrb_value *argv, */mrb_value //mrb_obj_call_init(obj, argc, argv);...mrb_funcall2(obj, idInitialize, argc, argv); mrb_value argv[16]; int argc; + struct RRegexp *re; mrb_get_args(mrb, "*", &argv, &argc); - struct RRegexp *re; re = mrb_obj_alloc(mrb, MRB_TT_REGEX, mrb->regex_class); re->ptr = 0; re->src = 0; @@ -1861,12 +1861,16 @@ mrb_match_begin(mrb_state *mrb, mrb_value match/*, mrb_value n*/) { mrb_value argv[16]; int argc; - mrb_get_args(mrb, "*", &argv, &argc); mrb_value n = argv[0]; - int i = match_backref_number(mrb, match, n); - struct re_registers *regs = RMATCH_REGS(match); + int i; + struct re_registers *regs; match_check(mrb, match); + mrb_get_args(mrb, "*", &argv, &argc); + n = argv[0]; + i = match_backref_number(mrb, match, n); + regs = RMATCH_REGS(match); + if (i < 0 || regs->num_regs <= i) mrb_raise(mrb, E_INDEX_ERROR, "index %d out of matches", i); @@ -1944,12 +1948,16 @@ mrb_match_end(mrb_state *mrb, mrb_value match/*, mrb_value n*/) { mrb_value argv[16]; int argc; - mrb_get_args(mrb, "*", &argv, &argc); - mrb_value n = argv[0]; - int i = match_backref_number(mrb, match, n); - struct re_registers *regs = RMATCH_REGS(match); + mrb_value n; + int i; + struct re_registers *regs; match_check(mrb, match); + mrb_get_args(mrb, "*", &argv, &argc); + n = argv[0]; + i = match_backref_number(mrb, match, n); + regs = RMATCH_REGS(match); + if (i < 0 || regs->num_regs <= i) mrb_raise(mrb, E_INDEX_ERROR, "index %d out of matches", i); @@ -2050,11 +2058,12 @@ mrb_match_offset(mrb_state *mrb, mrb_value match/*, mrb_value n*/) { mrb_value n; struct re_registers *regs = RMATCH_REGS(match); + int i; + match_check(mrb, match); mrb_get_args(mrb, "o", &n); - int i = match_backref_number(mrb, match, n); + i = match_backref_number(mrb, match, n); - match_check(mrb, match); if (i < 0 || regs->num_regs <= i) mrb_raise(mrb, E_INDEX_ERROR, "index %d out of matches", i); |
