diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-11-23 02:10:44 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-11-23 02:10:44 +0000 |
commit | d73f08d56d92de1ad41abb877c2f9ed6c8c15d76 (patch) | |
tree | 9961f41da837a9d8339d5f60293aa520d6ce0028 /re.c | |
parent | 050a10c607e471bb2f387eb9644db5ee9e43c46b (diff) |
* re.c (match_begin): should return offset by character.
[ruby-dev:32331]
* re.c (match_end): ditto.
* re.c (rb_reg_search): ditto.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@13999 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 're.c')
-rw-r--r-- | re.c | 34 |
1 files changed, 22 insertions, 12 deletions
@@ -608,6 +608,15 @@ match_size(VALUE match) return INT2FIX(RMATCH(match)->regs->num_regs); } +static VALUE +match_sublen(VALUE str, int offset) +{ + int i; + + i = rb_str_sublen(str, offset); + return INT2FIX(i); +} + /* * call-seq: @@ -632,8 +641,8 @@ match_offset(VALUE match, VALUE n) if (RMATCH(match)->regs->beg[i] < 0) return rb_assoc_new(Qnil, Qnil); - return rb_assoc_new(INT2FIX(RMATCH(match)->regs->beg[i]), - INT2FIX(RMATCH(match)->regs->end[i])); + return rb_assoc_new(match_sublen(RMATCH(match)->str, RMATCH(match)->regs->beg[i]), + match_sublen(RMATCH(match)->str, RMATCH(match)->regs->end[i])); } @@ -660,7 +669,7 @@ match_begin(VALUE match, VALUE n) if (RMATCH(match)->regs->beg[i] < 0) return Qnil; - return INT2FIX(RMATCH(match)->regs->beg[i]); + return match_sublen(RMATCH(match)->str, RMATCH(match)->regs->beg[i]); } @@ -687,7 +696,7 @@ match_end(VALUE match, VALUE n) if (RMATCH(match)->regs->beg[i] < 0) return Qnil; - return INT2FIX(RMATCH(match)->regs->end[i]); + return match_sublen(RMATCH(match)->str, RMATCH(match)->regs->end[i]); } #define MATCH_BUSY FL_USER2 @@ -739,10 +748,10 @@ rb_reg_prepare_re(VALUE re, VALUE str) } } -long -rb_reg_adjust_startpos(VALUE re, VALUE str, long pos, long reverse) +int +rb_reg_adjust_startpos(VALUE re, VALUE str, int pos, int reverse) { - long range; + int range; OnigEncoding enc; UChar *p, *string; @@ -773,13 +782,13 @@ rb_reg_adjust_startpos(VALUE re, VALUE str, long pos, long reverse) return pos; } -long -rb_reg_search(VALUE re, VALUE str, long pos, long reverse) +int +rb_reg_search(VALUE re, VALUE str, int pos, int reverse) { - long result; + int result; VALUE match; static struct re_registers regs; - long range; + int range; if (pos > RSTRING_LEN(str) || pos < 0) { rb_backref_set(Qnil); @@ -833,7 +842,8 @@ rb_reg_search(VALUE re, VALUE str, long pos, long reverse) OBJ_INFECT(match, re); OBJ_INFECT(match, str); - return result; + + return rb_str_sublen(RMATCH(match)->str, result); } VALUE |