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/