From 86bbfdadf3d9f2da5febeb02a3dcf81f3f2478ef Mon Sep 17 00:00:00 2001 From: nobu Date: Tue, 2 Aug 2011 03:03:18 +0000 Subject: [PATCH] * hash.c (recursive_hash): hash value of emptied hash should be equal to an empty hash. [ruby-core:38650] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32810 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ hash.c | 1 + test/ruby/test_hash.rb | 3 +++ 3 files changed, 9 insertions(+) diff --git a/ChangeLog b/ChangeLog index 3129252d8c..3690ea62b1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Tue Aug 2 12:03:16 2011 Nobuyoshi Nakada + + * hash.c (recursive_hash): hash value of emptied hash should be + equal to an empty hash. [ruby-core:38650] + Tue Aug 2 11:42:15 2011 Nobuyoshi Nakada * parse.y (rb_enc_symname2_p): :! is valid symbol. [Bug #5136] diff --git a/hash.c b/hash.c index 8d6cd96ded..fbd82374eb 100644 --- a/hash.c +++ b/hash.c @@ -1685,6 +1685,7 @@ recursive_hash(VALUE hash, VALUE dummy, int recur) if (!RHASH(hash)->ntbl) return LONG2FIX(0); hval = RHASH(hash)->ntbl->num_entries; + if (!hval) return LONG2FIX(0); if (recur) hval = rb_hash_uint(rb_hash_start(rb_hash(rb_cHash)), hval); else diff --git a/test/ruby/test_hash.rb b/test/ruby/test_hash.rb index 82aba92529..82272cb301 100644 --- a/test/ruby/test_hash.rb +++ b/test/ruby/test_hash.rb @@ -809,6 +809,9 @@ class TestHash < Test::Unit::TestCase def test_hash2 assert_kind_of(Integer, {}.hash) + h = {1=>2} + h.shift + assert_equal({}.hash, h.hash, '[ruby-core:38650]') end def test_update2