diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2000-06-22 08:29:58 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2000-06-22 08:29:58 +0000 |
commit | 44cf56d6e70dbe06a160b004494ba40dd4cfb426 (patch) | |
tree | 10e665c60414c3070ce957e5c534e30ed499bc2d /hash.c | |
parent | 4b4cad81e7d2bdc4750ea5043ce44bf37adb3997 (diff) |
2000-06-22
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@775 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'hash.c')
-rw-r--r-- | hash.c | 7 |
1 files changed, 6 insertions, 1 deletions
@@ -268,8 +268,13 @@ static VALUE rb_hash_dup(hash) VALUE hash; { + VALUE klass = CLASS_OF(hash); + NEWOBJ(dup, struct RHash); - OBJSETUP(dup, CLASS_OF(hash), T_HASH); + while (TYPE(klass) == T_ICLASS || FL_TEST(klass, FL_SINGLETON)) { + klass = (VALUE)RCLASS(klass)->super; + } + OBJSETUP(dup, klass, T_HASH); dup->iter_lev = 0; dup->ifnone = RHASH(hash)->ifnone; |