aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--enumerator.c2
-rw-r--r--test/ruby/test_enumerator.rb6
2 files changed, 7 insertions, 1 deletions
diff --git a/enumerator.c b/enumerator.c
index 021daeba59..609fc71015 100644
--- a/enumerator.c
+++ b/enumerator.c
@@ -1105,7 +1105,7 @@ append_method(VALUE obj, VALUE str, ID default_method, VALUE default_args)
rb_str_buf_cat2(str, "(");
- if (RB_TYPE_P(argv[argc-1], T_HASH)) {
+ if (RB_TYPE_P(argv[argc-1], T_HASH) && !RHASH_EMPTY_P(argv[argc-1])) {
int all_key = TRUE;
rb_hash_foreach(argv[argc-1], key_symbol_p, (VALUE)&all_key);
if (all_key) kwds = argv[--argc];
diff --git a/test/ruby/test_enumerator.rb b/test/ruby/test_enumerator.rb
index afd356105d..efcfef580f 100644
--- a/test/ruby/test_enumerator.rb
+++ b/test/ruby/test_enumerator.rb
@@ -407,6 +407,12 @@ class TestEnumerator < Test::Unit::TestCase
e = (0..10).each_cons(2)
assert_equal("#<Enumerator: 0..10:each_cons(2)>", e.inspect)
+ e = (0..10).each_with_object({})
+ assert_equal("#<Enumerator: 0..10:each_with_object({})>", e.inspect)
+
+ e = (0..10).each_with_object(a: 1)
+ assert_equal("#<Enumerator: 0..10:each_with_object(a: 1)>", e.inspect)
+
e = Enumerator.new {|y| y.yield; 10 }
assert_match(/\A#<Enumerator: .*:each>/, e.inspect)