From 74433fd300ff90e61086681fd1152d2da0d28171 Mon Sep 17 00:00:00 2001 From: nobu Date: Tue, 30 Aug 2005 14:49:51 +0000 Subject: * 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 --- array.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'array.c') diff --git a/array.c b/array.c index cdb64bf4d8..b0aa738adb 100644 --- a/array.c +++ b/array.c @@ -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; ilen; 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; ilen; 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; ilen; 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; -- cgit v1.2.3