From f6a9c859bec2801a99c26a09c8845c54401a62be Mon Sep 17 00:00:00 2001 From: matz Date: Mon, 10 Dec 2007 10:03:48 +0000 Subject: * re.c (rb_reg_match): should calculate offset by converted operand. [ruby-cvs:21416] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@14180 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- re.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 're.c') diff --git a/re.c b/re.c index 36493f3785..f41b4155a3 100644 --- a/re.c +++ b/re.c @@ -2124,13 +2124,15 @@ reg_operand(VALUE s, int check) } static long -rb_reg_match_pos(VALUE re, VALUE str, long pos) +reg_match_pos(VALUE re, VALUE *strp, long pos) { + VALUE str = *strp; + if (NIL_P(str)) { rb_backref_set(Qnil); return -1; } - str = reg_operand(str, Qtrue); + *strp = str = reg_operand(str, Qtrue); if (pos != 0) { if (pos < 0) { pos += RSTRING_LEN(str); @@ -2156,7 +2158,7 @@ rb_reg_match_pos(VALUE re, VALUE str, long pos) VALUE rb_reg_match(VALUE re, VALUE str) { - long pos = rb_reg_match_pos(re, str, 0); + long pos = reg_match_pos(re, &str, 0); if (pos < 0) return Qnil; pos = rb_str_sublen(str, pos); return LONG2FIX(pos); @@ -2270,7 +2272,7 @@ rb_reg_match_m(int argc, VALUE *argv, VALUE re) pos = 0; } - pos = rb_reg_match_pos(re, str, pos); + pos = reg_match_pos(re, &str, pos); if (pos < 0) { rb_backref_set(Qnil); return Qnil; -- cgit v1.2.3