* hash.c (initialize_copy): unset the default proc if there isn't one

for the target hash, call to_hash, check frozen status.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37271 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
tenderlove 2012-10-19 21:20:33 +00:00
Родитель 2fe13f62ef
Коммит fb03eb91fe
2 изменённых файлов: 11 добавлений и 0 удалений

Просмотреть файл

@ -1,3 +1,8 @@
Sat Oct 20 06:18:34 2012 Aaron Patterson <aaron@tenderlovemaking.com>
* hash.c (initialize_copy): unset the default proc if there isn't one
for the target hash, call to_hash, check frozen status.
Fri Oct 19 22:22:01 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
* vm.c (rb_vm_jump_tag_but_local_jump): pass through thrown objects.

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

@ -1185,6 +1185,9 @@ replace_i(VALUE key, VALUE val, VALUE hash)
static VALUE
rb_hash_initialize_copy(VALUE hash, VALUE hash2)
{
rb_hash_modify_check(hash);
hash2 = to_hash(hash2);
Check_Type(hash2, T_HASH);
if (!RHASH_EMPTY_P(hash2)) {
@ -1195,6 +1198,9 @@ rb_hash_initialize_copy(VALUE hash, VALUE hash2)
if (FL_TEST(hash2, HASH_PROC_DEFAULT)) {
FL_SET(hash, HASH_PROC_DEFAULT);
}
else {
FL_UNSET(hash, HASH_PROC_DEFAULT);
}
RHASH_IFNONE(hash) = RHASH_IFNONE(hash2);
return hash;