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

ruby-changes:11372

From: knu <ko1@a...>
Date: Tue, 17 Mar 2009 18:09:25 +0900 (JST)
Subject: [ruby-changes:11372] Ruby:r22992 (trunk): * enumerator.c (Enumerator#{each_,}{with_index,with_object}): Fix

knu	2009-03-17 18:07:18 +0900 (Tue, 17 Mar 2009)

  New Revision: 22992

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=22992

  Log:
    * enumerator.c (Enumerator#{each_,}{with_index,with_object}): Fix
      a bug where any parameter but the first one is dropped even if
      multiple values are yielded with. [Bug #1198]

  Modified files:
    trunk/ChangeLog
    trunk/enumerator.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 22991)
+++ ChangeLog	(revision 22992)
@@ -1,3 +1,9 @@
+Tue Mar 17 18:00:55 2009  Akinori MUSHA  <knu@i...>
+
+	* enumerator.c (Enumerator#{each_,}{with_index,with_object}): Fix
+	  a bug where any parameter but the first one is dropped even if
+	  multiple values are yielded with. [Bug #1198]
+
 Tue Mar 17 14:25:16 2009  Tanaka Akira  <akr@f...>
 
 	* lib/pathname.rb (Pathname#sub): set $~ in block.binding.
Index: enumerator.c
===================================================================
--- enumerator.c	(revision 22991)
+++ enumerator.c	(revision 22992)
@@ -397,11 +397,17 @@
 }
 
 static VALUE
-enumerator_with_index_i(VALUE val, VALUE *memo)
+enumerator_with_index_i(VALUE val, VALUE *memo, int argc, VALUE *argv)
 {
-    val = rb_yield_values(2, val, INT2FIX(*memo));
+    VALUE idx;
+
+    idx = INT2FIX(*memo);
     ++*memo;
-    return val;
+
+    if (argc <= 1)
+	return rb_yield_values(2, val, idx);
+
+    return rb_yield_values(2, rb_ary_new4(argc, argv), idx);
 }
 
 /*
@@ -451,9 +457,12 @@
 }
 
 static VALUE
-enumerator_with_object_i(VALUE val, VALUE memo)
+enumerator_with_object_i(VALUE val, VALUE memo, int argc, VALUE *argv)
 {
-    return rb_yield_values(2, val, memo);
+    if (argc <= 1)
+	return rb_yield_values(2, val, memo);
+
+    return rb_yield_values(2, rb_ary_new4(argc, argv), memo);
 }
 
 /*

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

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