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

ruby-changes:4517

From: ko1@a...
Date: Mon, 14 Apr 2008 18:20:13 +0900 (JST)
Subject: [ruby-changes:4517] knu - Ruby:r16010 (ruby_1_8): * enum.c (enum_find, enum_reject): Return an enumerator if no

knu	2008-04-14 18:19:52 +0900 (Mon, 14 Apr 2008)

  New Revision: 16010

  Modified files:
    branches/ruby_1_8/ChangeLog
    branches/ruby_1_8/NEWS
    branches/ruby_1_8/enum.c
    branches/ruby_1_8/io.c
    branches/ruby_1_8/string.c

  Log:
    * enum.c (enum_find, enum_reject): Return an enumerator if no
      block is given.
    
    * io.c (rb_io_each_line, rb_io_each_byte, rb_io_s_foreach,
      argf_each_line, argf_each_byte): Ditto.
    
    * string.c (str_gsub): Ditto.


  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/enum.c?r1=16010&r2=16009&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/ChangeLog?r1=16010&r2=16009&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/io.c?r1=16010&r2=16009&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/NEWS?r1=16010&r2=16009&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/string.c?r1=16010&r2=16009&diff_format=u

Index: ruby_1_8/NEWS
===================================================================
--- ruby_1_8/NEWS	(revision 16009)
+++ ruby_1_8/NEWS	(revision 16010)
@@ -68,8 +68,10 @@
 
     New methods.
 
+  * Enumerable#find
   * Enumerable#find_all
   * Enumerable#partition
+  * Enumerable#reject
   * Enumerable#select
   * Enumerable#sort_by
 
@@ -105,6 +107,16 @@
 
     Return an enumerator if no block is given.
 
+  * IO#each
+  * IO#each_line
+  * IO#each_byte
+  * IO.foreach
+  * ARGF.each
+  * ARGF.each_line
+  * ARGF.each_byte
+
+    Return an enumerator if no block is given.
+
   * Numeric#step
 
     Return an enumerator if no block is given.
@@ -137,6 +149,7 @@
   * String#each_byte
   * String#each
   * String#each_lines
+  * String#gsub(pattern)
 
     Return an enumerator if no block is given.
 
Index: ruby_1_8/ChangeLog
===================================================================
--- ruby_1_8/ChangeLog	(revision 16009)
+++ ruby_1_8/ChangeLog	(revision 16010)
@@ -1,3 +1,13 @@
+Mon Apr 14 18:14:19 2008  Akinori MUSHA  <knu@i...>
+
+	* enum.c (enum_find, enum_reject): Return an enumerator if no
+	  block is given.
+
+	* io.c (rb_io_each_line, rb_io_each_byte, rb_io_s_foreach,
+	  argf_each_line, argf_each_byte): Ditto.
+
+	* string.c (str_gsub): Ditto.
+
 Mon Apr 14 18:10:05 2008  NAKAMURA Usaku  <usa@r...>
 
 	* enum.c (find_index_i, find_index_iter_i): add prototype for VC.
Index: ruby_1_8/enum.c
===================================================================
--- ruby_1_8/enum.c	(revision 16009)
+++ ruby_1_8/enum.c	(revision 16010)
@@ -219,6 +219,7 @@
     VALUE if_none;
 
     rb_scan_args(argc, argv, "01", &if_none);
+    RETURN_ENUMERATOR(obj, argc, argv);
     rb_iterate(rb_each, obj, find_i, (VALUE)&memo);
     if (memo != Qundef) {
 	return memo;
@@ -366,6 +367,7 @@
 {
     VALUE ary = rb_ary_new();
     
+    RETURN_ENUMERATOR(obj, 0, 0);
     rb_iterate(rb_each, obj, reject_i, ary);
 
     return ary;
Index: ruby_1_8/string.c
===================================================================
--- ruby_1_8/string.c	(revision 16009)
+++ ruby_1_8/string.c	(revision 16010)
@@ -2096,7 +2096,8 @@
     char *buf, *bp, *sp, *cp;
     int tainted = 0;
 
-    if (argc == 1 && rb_block_given_p()) {
+    if (argc == 1) {
+        RETURN_ENUMERATOR(str, argc, argv);
 	iter = 1;
     }
     else if (argc == 2) {
Index: ruby_1_8/io.c
===================================================================
--- ruby_1_8/io.c	(revision 16009)
+++ ruby_1_8/io.c	(revision 16010)
@@ -1964,6 +1964,7 @@
     VALUE str;
     VALUE rs;
 
+    RETURN_ENUMERATOR(io, argc, argv);
     if (argc == 0) {
 	rs = rb_rs;
     }
@@ -1999,6 +2000,7 @@
     FILE *f;
     int c;
 
+    RETURN_ENUMERATOR(io, 0, 0);
     GetOpenFile(io, fptr);
 
     for (;;) {
@@ -5268,14 +5270,16 @@
  */     
 
 static VALUE
-rb_io_s_foreach(argc, argv)
+rb_io_s_foreach(argc, argv, self)
     int argc;
     VALUE *argv;
+    VALUE self;
 {
     VALUE fname;
     struct foreach_arg arg;
 
     rb_scan_args(argc, argv, "11", &fname, &arg.sep);
+    RETURN_ENUMERATOR(self, argc, argv);
     SafeStringValue(fname);
 
     if (argc == 1) {
@@ -5527,12 +5531,14 @@
 }
 
 static VALUE
-argf_each_line(argc, argv)
+argf_each_line(argc, argv, argf)
     int argc;
     VALUE *argv;
+    VALUE argf;
 {
     VALUE str;
 
+    RETURN_ENUMERATOR(argf, argc, argv);
     if (!next_argv()) return Qnil;
     if (TYPE(current_file) != T_FILE) {
 	for (;;) {
@@ -5548,10 +5554,12 @@
 }
 
 static VALUE
-argf_each_byte()
+argf_each_byte(argf)
+    VALUE argf;
 {
     VALUE byte;
 
+    RETURN_ENUMERATOR(argf, 0, 0);
     while (!NIL_P(byte = argf_getc())) {
 	rb_yield(byte);
     }

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

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