summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--enum.c10
-rw-r--r--test/ruby/test_enum.rb2
2 files changed, 11 insertions, 1 deletions
diff --git a/enum.c b/enum.c
index 519d8873f6..383619999b 100644
--- a/enum.c
+++ b/enum.c
@@ -1010,8 +1010,16 @@ enum_inject(int argc, VALUE *argv, VALUE obj)
VALUE init, op;
rb_block_call_func *iter = inject_i;
ID id;
+ int num_args;
- switch (rb_scan_args(argc, argv, "02", &init, &op)) {
+ if (rb_block_given_p()) {
+ num_args = rb_scan_args(argc, argv, "02", &init, &op);
+ }
+ else {
+ num_args = rb_scan_args(argc, argv, "11", &init, &op);
+ }
+
+ switch (num_args) {
case 0:
init = Qundef;
break;
diff --git a/test/ruby/test_enum.rb b/test/ruby/test_enum.rb
index b0c43b9a7f..cc217b05cc 100644
--- a/test/ruby/test_enum.rb
+++ b/test/ruby/test_enum.rb
@@ -234,6 +234,8 @@ class TestEnumerable < Test::Unit::TestCase
assert_equal(24, @obj.inject(2) {|z, x| z * x })
assert_equal(24, assert_warning(/given block not used/) {@obj.inject(2, :*) {|z, x| z * x }})
assert_equal(nil, @empty.inject() {9})
+
+ assert_raise(ArgumentError) {@obj.inject}
end
FIXNUM_MIN = RbConfig::LIMITS['FIXNUM_MIN']