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

ruby-changes:5918

From: matz <ko1@a...>
Date: Thu, 19 Jun 2008 17:26:05 +0900 (JST)
Subject: [ruby-changes:5918] Ruby:r17426 (trunk): * string.c (rb_str_scan): String#scan should preserve last

matz	2008-06-19 17:25:50 +0900 (Thu, 19 Jun 2008)

  New Revision: 17426

  Modified files:
    trunk/ChangeLog
    trunk/string.c

  Log:
    * string.c (rb_str_scan): String#scan should preserve last
      successful match data.  [ruby-dev:35106]

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/string.c?r1=17426&r2=17425&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=17426&r2=17425&diff_format=u

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 17425)
+++ ChangeLog	(revision 17426)
@@ -1,3 +1,8 @@
+Thu Jun 19 17:19:14 2008  Yukihiro Matsumoto  <matz@r...>
+
+	* string.c (rb_str_scan): String#scan should preserve last
+	  successful match data.  [ruby-dev:35106]
+
 Thu Jun 19 16:49:36 2008  NAKAMURA Usaku  <usa@r...>
 
 	* missing/acosh.c (atanh): should set ERANGE to errno if parameter
Index: string.c
===================================================================
--- string.c	(revision 17425)
+++ string.c	(revision 17426)
@@ -5689,7 +5689,7 @@
 {
     VALUE result;
     long start = 0;
-    VALUE match = Qnil;
+    long last = -1, prev = 0;
     char *p = RSTRING_PTR(str); long len = RSTRING_LEN(str);
 
     pat = get_pat(pat, 1);
@@ -5697,18 +5697,21 @@
 	VALUE ary = rb_ary_new();
 
 	while (!NIL_P(result = scan_once(str, pat, &start))) {
-	    match = rb_backref_get();
+	    last = prev;
+	    prev = start;
 	    rb_ary_push(ary, result);
 	}
-	rb_backref_set(match);
+	if (last >= 0) rb_reg_search(pat, str, last, 0);
 	return ary;
     }
 
     while (!NIL_P(result = scan_once(str, pat, &start))) {
+	last = prev;
+	prev = start;
 	rb_yield(result);
 	str_mod_check(str, p, len);
     }
-    rb_backref_set(match);
+    if (last >= 0) rb_reg_search(pat, str, last, 0);
     return str;
 }
 

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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