diff options
author | knu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-04-09 12:21:25 +0000 |
---|---|---|
committer | knu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-04-09 12:21:25 +0000 |
commit | 343069e16a0f30ab58d27d869f557fd5ccb1d65c (patch) | |
tree | 3aeb6278e4d9fcd1d011a3bc5598bde693bea36a | |
parent | 6584020a5735606b9ea3f7d58408fe886b93cb98 (diff) |
* array.c (rb_ary_each, rb_ary_each_index, rb_ary_reverse_each,
rb_ary_reject_bang): Calling Array#each, #each_index,
#reverse_each, #reject! or #delete_if without a block now
returns an enumerator; backported from 1.9.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@15938 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | array.c | 7 |
2 files changed, 13 insertions, 1 deletions
@@ -1,3 +1,10 @@ +Wed Apr 9 21:13:05 2008 Akinori MUSHA <knu@iDaemons.org> + + * array.c (rb_ary_each, rb_ary_each_index, rb_ary_reverse_each, + rb_ary_reject_bang): Calling Array#each, #each_index, + #reverse_each, #reject! or #delete_if without a block now + returns an enumerator; backported from 1.9. + Wed Apr 9 20:47:16 2008 Akinori MUSHA <knu@iDaemons.org> * array.c (rb_ary_index, rb_ary_index): Array#index and #rindex @@ -1162,6 +1162,7 @@ rb_ary_each(ary) { long i; + RETURN_ENUMERATOR(ary, 0, 0) for (i=0; i<RARRAY(ary)->len; i++) { rb_yield(RARRAY(ary)->ptr[i]); } @@ -1189,6 +1190,7 @@ rb_ary_each_index(ary) { long i; + RETURN_ENUMERATOR(ary, 0, 0); for (i=0; i<RARRAY(ary)->len; i++) { rb_yield(LONG2NUM(i)); } @@ -1214,8 +1216,10 @@ static VALUE rb_ary_reverse_each(ary) VALUE ary; { - long len = RARRAY(ary)->len; + long len; + RETURN_ENUMERATOR(ary, 0, 0); + len = RARRAY(ary)->len; while (len--) { rb_yield(RARRAY(ary)->ptr[len]); if (RARRAY(ary)->len < len) { @@ -2033,6 +2037,7 @@ rb_ary_reject_bang(ary) { long i1, i2; + RETURN_ENUMERATOR(ary, 0, 0); rb_ary_modify(ary); for (i1 = i2 = 0; i1 < RARRAY(ary)->len; i1++) { VALUE v = RARRAY(ary)->ptr[i1]; |