summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--enum.c9
2 files changed, 13 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 2f54f1d050..c00973c8e6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Fri Nov 30 19:05:55 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * enum.c (enum_count): precise argument number check.
+
+ * enum.c (enum_count): return Enumerator if no block given.
+
Fri Nov 30 16:42:50 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
* enum.c (enum_take_while): returns Enumerator if no block given.
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