summaryrefslogtreecommitdiff
path: root/string.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-08-30 14:49:51 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-08-30 14:49:51 +0000
commit74433fd300ff90e61086681fd1152d2da0d28171 (patch)
tree34fedf9739363293313b40fa4509e7f87ef93880 /string.c
parent87e8b14cc403f13d5c0d3cbd715a2d85c52fcb95 (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.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/string.c b/string.c
index bbdafd0d25..16c1f02b1b 100644
--- a/string.c
+++ b/string.c
@@ -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();