diff options
-rw-r--r-- | re.c | 55 |
1 files changed, 44 insertions, 11 deletions
@@ -88,6 +88,9 @@ static const char casetable[] = { # error >>> "You lose. You will need a translation table for your character set." <<< #endif int rb_memcicmp(const void *x, const void *y, long len) { @@ -1732,6 +1735,23 @@ reg_onig_search(regex_t *reg, VALUE str, struct re_registers *regs, void *args_p ONIG_OPTION_NONE); } /* returns byte offset */ static long rb_reg_search_set_match(VALUE re, VALUE str, long pos, int reverse, int set_backref_str, VALUE *set_match) @@ -1742,22 +1762,38 @@ rb_reg_search_set_match(VALUE re, VALUE str, long pos, int reverse, int set_back return -1; } - struct reg_onig_search_args args = { - .pos = pos, - .range = reverse ? 0 : len, }; - struct re_registers regs = {0}; - OnigPosition result = rb_reg_onig_match(re, str, reg_onig_search, &args, ®s); - if (result == ONIG_MISMATCH) { rb_backref_set(Qnil); return ONIG_MISMATCH; } VALUE match = match_alloc(rb_cMatch); rb_matchext_t *rm = RMATCH_EXT(match); - rm->regs = regs; if (set_backref_str) { RB_OBJ_WRITE(match, &RMATCH(match)->str, rb_str_new4(str)); @@ -1774,7 +1810,7 @@ rb_reg_search_set_match(VALUE re, VALUE str, long pos, int reverse, int set_back rb_backref_set(match); if (set_match) *set_match = match; - return result; } long @@ -4601,9 +4637,6 @@ re_warn(const char *s) rb_warn("%s", s); } -// The process-global timeout for regexp matching -rb_hrtime_t rb_reg_match_time_limit = 0; - // This function is periodically called during regexp matching bool rb_reg_timeout_p(regex_t *reg, void *end_time_) |