diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 1999-11-24 07:13:53 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 1999-11-24 07:13:53 +0000 |
commit | 9031679facdaf5fff73afc68683b53ae34fc3f44 (patch) | |
tree | a4a41211bac9c651e93bc4e8553ce4489eaac1a9 /enum.c | |
parent | b1d45b805c22e9dba70400100aa080c515e0f2c9 (diff) |
19991124-1.4.3pre1
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_4@565 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'enum.c')
-rw-r--r-- | enum.c | 20 |
1 files changed, 9 insertions, 11 deletions
@@ -33,11 +33,11 @@ grep_i(i, arg) } static VALUE -grep_iter_i(i, pat) - VALUE i, pat; +grep_iter_i(i, arg) + VALUE i, *arg; { - if (RTEST(rb_funcall(pat, id_eqq, 1, i))) { - rb_yield(i); + if (RTEST(rb_funcall(arg[0], id_eqq, 1, i))) { + rb_ary_push(arg[1], rb_yield(i)); } return Qnil; } @@ -46,19 +46,17 @@ static VALUE enum_grep(obj, pat) VALUE obj, pat; { + VALUE tmp, arg[2]; + + arg[0] = pat; arg[1] = tmp = rb_ary_new(); if (rb_iterator_p()) { - rb_iterate(rb_each, obj, grep_iter_i, pat); - return obj; + rb_iterate(rb_each, obj, grep_iter_i, (VALUE)arg); } else { - VALUE tmp, arg[2]; - - arg[0] = pat; arg[1] = tmp = rb_ary_new(); rb_iterate(rb_each, obj, grep_i, (VALUE)arg); - if (RARRAY(tmp)->len == 0) return Qnil; - return tmp; } + return tmp; } struct find_arg { |