diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-08-30 14:49:51 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-08-30 14:49:51 +0000 |
commit | 74433fd300ff90e61086681fd1152d2da0d28171 (patch) | |
tree | 34fedf9739363293313b40fa4509e7f87ef93880 /array.c | |
parent | 87e8b14cc403f13d5c0d3cbd715a2d85c52fcb95 (diff) | |
download | ruby-74433fd300ff90e61086681fd1152d2da0d28171.tar.gz |
* array.c, dir.c, enum.c, hash.c, io.c, range.c, string.c, struct.c:
let enumerable methods return Enumerator. [ruby-dev:26924]
* intern.h (RETURN_ENUMERATOR): utility macro for enumerable methods.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@9053 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'array.c')
-rw-r--r-- | array.c | 14 |
1 files changed, 10 insertions, 4 deletions
@@ -992,6 +992,7 @@ rb_ary_index(argc, argv, ary) long i; if (rb_scan_args(argc, argv, "01", &val) == 0) { + RETURN_ENUMERATOR(ary, 0, 0); for (i=0; i<RARRAY(ary)->len; i++) { if (RTEST(rb_yield(RARRAY(ary)->ptr[i]))) { return LONG2NUM(i); @@ -1033,6 +1034,7 @@ rb_ary_rindex(argc, argv, ary) if (rb_scan_args(argc, argv, "01", &val) == 0) { while (i--) { + RETURN_ENUMERATOR(ary, 0, 0); if (RTEST(rb_yield(RARRAY(ary)->ptr[i]))) return LONG2NUM(i); if (i > RARRAY(ary)->len) { @@ -1246,6 +1248,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]); } @@ -1273,6 +1276,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)); } @@ -1300,6 +1304,7 @@ rb_ary_reverse_each(ary) { long len = RARRAY(ary)->len; + RETURN_ENUMERATOR(ary, 0, 0); while (len--) { rb_yield(RARRAY(ary)->ptr[len]); if (RARRAY(ary)->len < len) { @@ -1736,10 +1741,7 @@ rb_ary_collect(ary) long i; VALUE collect; - if (!rb_block_given_p()) { - return rb_ary_new4(RARRAY(ary)->len, RARRAY(ary)->ptr); - } - + RETURN_ENUMERATOR(ary, 0, 0); collect = rb_ary_new2(RARRAY(ary)->len); for (i = 0; i < RARRAY(ary)->len; i++) { rb_ary_push(collect, rb_yield(RARRAY(ary)->ptr[i])); @@ -1767,6 +1769,7 @@ rb_ary_collect_bang(ary) { long i; + RETURN_ENUMERATOR(ary, 0, 0); rb_ary_modify(ary); for (i = 0; i < RARRAY(ary)->len; i++) { rb_ary_store(ary, i, rb_yield(RARRAY(ary)->ptr[i])); @@ -1851,6 +1854,7 @@ rb_ary_select(ary) VALUE result; long i; + RETURN_ENUMERATOR(ary, 0, 0); result = rb_ary_new2(RARRAY(ary)->len); for (i = 0; i < RARRAY(ary)->len; i++) { if (RTEST(rb_yield(RARRAY(ary)->ptr[i]))) { @@ -2027,6 +2031,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]; @@ -2055,6 +2060,7 @@ static VALUE rb_ary_reject(ary) VALUE ary; { + RETURN_ENUMERATOR(ary, 0, 0); ary = rb_ary_dup(ary); rb_ary_reject_bang(ary); return ary; |