ruby-changes:4894
From: ko1@a...
Date: Mon, 12 May 2008 15:10:09 +0900 (JST)
Subject: [ruby-changes:4894] matz - Ruby:r16387 (trunk): * re.c (rb_reg_prepare_re): made non static with small refactoring.
matz 2008-05-12 15:09:53 +0900 (Mon, 12 May 2008)
New Revision: 16387
Modified files:
trunk/ChangeLog
trunk/ext/strscan/strscan.c
trunk/re.c
trunk/test/strscan/test_stringscanner.rb
Log:
* re.c (rb_reg_prepare_re): made non static with small refactoring.
* ext/strscan/strscan.c (strscan_do_scan): should adjust encoding
before regex searching.
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=16387&r2=16386&diff_format=u
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/test/strscan/test_stringscanner.rb?r1=16387&r2=16386&diff_format=u
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/re.c?r1=16387&r2=16386&diff_format=u
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ext/strscan/strscan.c?r1=16387&r2=16386&diff_format=u
Index: re.c
===================================================================
--- re.c (revision 16386)
+++ re.c (revision 16387)
@@ -1181,8 +1181,8 @@
return RREGEXP(re)->ptr->enc;
}
-static regex_t *
-rb_reg_prepare_re(VALUE re, rb_encoding *enc)
+regex_t *
+rb_reg_prepare_re(VALUE re, VALUE str)
{
regex_t *reg = RREGEXP(re)->ptr;
onig_errmsg_buffer err = "";
@@ -1191,6 +1191,7 @@
const char *pattern;
VALUE unescaped;
rb_encoding *fixed_enc = 0;
+ rb_encoding *enc = rb_reg_prepare_enc(re, str, 1);
if (reg->enc == enc) return reg;
@@ -1265,7 +1266,7 @@
return -1;
}
- reg = rb_reg_prepare_re(re, rb_reg_prepare_enc(re, str, 1));
+ reg = rb_reg_prepare_re(re, str);
FL_SET(re, REG_BUSY);
if (!reverse) {
Index: ChangeLog
===================================================================
--- ChangeLog (revision 16386)
+++ ChangeLog (revision 16387)
@@ -1,3 +1,10 @@
+Mon May 12 15:04:58 2008 Yukihiro Matsumoto <matz@r...>
+
+ * re.c (rb_reg_prepare_re): made non static with small refactoring.
+
+ * ext/strscan/strscan.c (strscan_do_scan): should adjust encoding
+ before regex searching.
+
Mon May 12 13:57:19 2008 Yukihiro Matsumoto <matz@r...>
* eval.c (is_defined): add NODE_OP_ASGN_{OR,AND}. "defined?(a||=1)"
Index: ext/strscan/strscan.c
===================================================================
--- ext/strscan/strscan.c (revision 16386)
+++ ext/strscan/strscan.c (revision 16387)
@@ -403,7 +403,9 @@
static VALUE
strscan_do_scan(VALUE self, VALUE regex, int succptr, int getstr, int headonly)
{
+ regex_t *rb_reg_prepare_re(VALUE re, VALUE str);
struct strscanner *p;
+ regex_t *re;
int ret;
Check_Type(regex, T_REGEXP);
@@ -413,13 +415,14 @@
if (S_RESTLEN(p) < 0) {
return Qnil;
}
+ re = rb_reg_prepare_re(regex, p->str);
if (headonly) {
- ret = onig_match(RREGEXP(regex)->ptr, (UChar* )CURPTR(p),
+ ret = onig_match(re, (UChar* )CURPTR(p),
(UChar* )(CURPTR(p) + S_RESTLEN(p)),
(UChar* )CURPTR(p), &(p->regs), ONIG_OPTION_NONE);
}
else {
- ret = onig_search(RREGEXP(regex)->ptr,
+ ret = onig_search(re,
(UChar* )CURPTR(p), (UChar* )(CURPTR(p) + S_RESTLEN(p)),
(UChar* )CURPTR(p), (UChar* )(CURPTR(p) + S_RESTLEN(p)),
&(p->regs), ONIG_OPTION_NONE);
Index: test/strscan/test_stringscanner.rb
===================================================================
--- test/strscan/test_stringscanner.rb (revision 16386)
+++ test/strscan/test_stringscanner.rb (revision 16387)
@@ -545,7 +545,7 @@
def test_generic_regexp
ss = StringScanner.new("\xA1\xA2".force_encoding("euc-jp"))
t = ss.scan(/./)
- assert_equal("\xa1\xa1".force_encoding("euc-jp"), t)
+ assert_equal("\xa1\xa2".force_encoding("euc-jp"), t)
end
end
--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/