summaryrefslogtreecommitdiff
path: root/enum.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-11-30 10:08:03 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-11-30 10:08:03 +0000
commit9497f7996a67fd4ef1a89292d84a9b89e86a829b (patch)
tree9fd0960bc729aa76551c6aec1a8611fc5b711ce9 /enum.c
parent092ec0146dbf4489e4754a6287ddc81feb055c83 (diff)
* enum.c (enum_count): precise argument number check.
* enum.c (enum_count): return Enumerator if no block given. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@14049 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'enum.c')
-rw-r--r--enum.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/enum.c b/enum.c
index 4196802de9..544033e967 100644
--- a/enum.c
+++ b/enum.c
@@ -114,12 +114,17 @@ enum_count(int argc, VALUE *argv, VALUE obj)
rb_block_call(obj, id_each, 0, 0, count_i, (VALUE)&args);
return INT2NUM(args[1]);
}
- else {
- long n = 0;
+ else if (argc == 0) {
+ long n;
+ RETURN_ENUMERATOR(obj, 0, 0);
+ n = 0;
rb_block_call(obj, id_each, 0, 0, count_iter_i, (VALUE)&n);
return INT2NUM(n);
}
+ else {
+ rb_scan_args(argc, argv, "1", &argv[0]);
+ }
}
static VALUE