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 /string.c | |
parent | 87e8b14cc403f13d5c0d3cbd715a2d85c52fcb95 (diff) |
* 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 'string.c')
-rw-r--r-- | string.c | 17 |
1 files changed, 12 insertions, 5 deletions
@@ -2048,15 +2048,17 @@ str_gsub(argc, argv, str, bang) char *buf, *bp, *sp, *cp; int tainted = 0; - if (argc == 1 && rb_block_given_p()) { + switch (argc) { + case 1: + RETURN_ENUMERATOR(str, argc, argv); iter = 1; - } - else if (argc == 2) { + break; + case 2: repl = argv[1]; StringValue(repl); if (OBJ_TAINTED(repl)) tainted = 1; - } - else { + break; + default: rb_raise(rb_eArgError, "wrong number of arguments (%d for 2)", argc); } @@ -3692,6 +3694,8 @@ rb_str_each_line(argc, argv, str) rs = rb_rs; } + RETURN_ENUMERATOR(str, argc, argv); + if (NIL_P(rs)) { rb_yield(str); return str; @@ -3751,6 +3755,7 @@ rb_str_each_byte(str) { long i; + RETURN_ENUMERATOR(str, 0, 0); for (i=0; i<RSTRING(str)->len; i++) { rb_yield(INT2FIX(RSTRING(str)->ptr[i] & 0xff)); } @@ -4267,6 +4272,8 @@ rb_str_scan(str, pat) long start = 0; VALUE match = Qnil; + RETURN_ENUMERATOR(str, 1, &pat); + pat = get_pat(pat, 1); if (!rb_block_given_p()) { VALUE ary = rb_ary_new(); |