From b514a325b560d0f36451050e15dd7ff985171d7b Mon Sep 17 00:00:00 2001 From: "(no author)" <(no author)@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> Date: Tue, 7 Dec 1999 16:47:21 +0000 Subject: This commit was manufactured by cvs2svn to create tag 'v1_4_3'. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/tags/v1_4_3@582 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- enum.c | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) (limited to 'enum.c') diff --git a/enum.c b/enum.c index dc7e2112a4..2825855d53 100644 --- a/enum.c +++ b/enum.c @@ -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,16 @@ 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 { @@ -201,7 +198,7 @@ min_i(i, min) *min = i; else { cmp = rb_funcall(i, id_cmp, 1, *min); - if (FIX2LONG(cmp) < 0) + if (NUM2LONG(cmp) < 0) *min = i; } return Qnil; @@ -217,7 +214,7 @@ min_ii(i, min) *min = i; else { cmp = rb_yield(rb_assoc_new(i, *min)); - if (FIX2LONG(cmp) < 0) + if (NUM2LONG(cmp) < 0) *min = i; } return Qnil; @@ -243,7 +240,7 @@ max_i(i, max) *max = i; else { cmp = rb_funcall(i, id_cmp, 1, *max); - if (FIX2LONG(cmp) > 0) + if (NUM2LONG(cmp) > 0) *max = i; } return Qnil; @@ -259,7 +256,7 @@ max_ii(i, max) *max = i; else { cmp = rb_yield(rb_assoc_new(i, *max)); - if (FIX2LONG(cmp) > 0) + if (NUM2LONG(cmp) > 0) *max = i; } return Qnil; -- cgit v1.2.3