diff options
| author | yugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-04-19 13:33:31 +0000 |
|---|---|---|
| committer | yugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-04-19 13:33:31 +0000 |
| commit | ea427bf41b9a97a0b9b9b28b0a16cff7eea99c69 (patch) | |
| tree | 0cf03ab044e821ebc6de9b2393a7d278de22fea5 | |
| parent | db738b77beb3a5e09bb035985ebd18663e2395d9 (diff) | |
merges r22992 from trunk into ruby_1_9_1.
--
* 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]
git-svn-id: http://svn.ruby-lang.org/repos/ruby/branches/ruby_1_9_1@23219 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
| -rw-r--r-- | ChangeLog | 6 | ||||
| -rw-r--r-- | enumerator.c | 19 |
2 files changed, 20 insertions, 5 deletions
@@ -1,3 +1,9 @@ +Tue Mar 17 18:00:55 2009 Akinori MUSHA <knu@iDaemons.org> + + * 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@fsij.org> * lib/pathname.rb (Pathname#sub): set $~ in block.binding. diff --git a/enumerator.c b/enumerator.c index 5dc6eee23..b95280876 100644 --- a/enumerator.c +++ b/enumerator.c @@ -397,11 +397,17 @@ enumerator_each(VALUE obj) } 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); } /* @@ -432,9 +438,12 @@ enumerator_with_index(VALUE obj) } 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); } /* |
