[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]