hash.c: hash_dup for rb_hash_to_h

* hash.c (rb_hash_to_h): share hash_dup to copy the contents and
  the default value/proc only.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54056 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2016-03-09 07:17:02 +00:00
Родитель 865a326da9
Коммит 921d6e269d
1 изменённых файлов: 2 добавлений и 8 удалений

10
hash.c
Просмотреть файл

@ -1881,14 +1881,8 @@ static VALUE
rb_hash_to_h(VALUE hash)
{
if (rb_obj_class(hash) != rb_cHash) {
VALUE ret = rb_hash_new();
if (!RHASH_EMPTY_P(hash))
RHASH(ret)->ntbl = st_copy(RHASH(hash)->ntbl);
if (FL_TEST(hash, HASH_PROC_DEFAULT)) {
FL_SET(ret, HASH_PROC_DEFAULT);
}
RHASH_SET_IFNONE(ret, RHASH_IFNONE(hash));
return ret;
const VALUE flags = RBASIC(hash)->flags;
hash = hash_dup(hash, rb_cHash, flags & HASH_PROC_DEFAULT);
}
return hash;
}