summaryrefslogtreecommitdiff
path: root/re.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-11-23 02:10:44 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-11-23 02:10:44 +0000
commitd73f08d56d92de1ad41abb877c2f9ed6c8c15d76 (patch)
tree9961f41da837a9d8339d5f60293aa520d6ce0028 /re.c
parent050a10c607e471bb2f387eb9644db5ee9e43c46b (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.c34
1 files changed, 22 insertions, 12 deletions
diff --git a/re.c b/re.c
index 573fb2ee3b..4e915f6f78 100644
--- a/re.c
+++ b/re.c
@@ -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