diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-06-07 16:19:47 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-06-07 16:19:47 +0000 |
commit | cd6414267feba67f039d0a419ae91ae50ea26cd7 (patch) | |
tree | ee9d4154ddf29f3de94d3c1e113da4842b1ae47e /hash.c | |
parent | aaaab31d8b49244c0df11302788e8c5014909e23 (diff) |
* hash.c (hash_i): make Hash#hash order insensitive.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@16880 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'hash.c')
-rw-r--r-- | hash.c | 11 |
1 files changed, 6 insertions, 5 deletions
@@ -231,14 +231,16 @@ rb_hash_new(void) VALUE rb_hash_dup(VALUE hash) { - VALUE ret = hash_alloc(RBASIC(hash)->klass); + NEWOBJ(ret, struct RHash); + DUPSETUP(ret, hash); + if (!RHASH_EMPTY_P(hash)) - RHASH(ret)->ntbl = st_copy(RHASH(hash)->ntbl); + ret->ntbl = st_copy(RHASH(hash)->ntbl); if (FL_TEST(hash, HASH_PROC_DEFAULT)) { FL_SET(ret, HASH_PROC_DEFAULT); } - RHASH(ret)->ifnone = RHASH(hash)->ifnone; - return ret; + ret->ifnone = RHASH(hash)->ifnone; + return (VALUE)ret; } static void @@ -1470,7 +1472,6 @@ hash_i(VALUE key, VALUE val, int *hval) { if (key == Qundef) return ST_CONTINUE; *hval ^= rb_hash(key); - *hval *= 137; *hval ^= rb_hash(val); return ST_CONTINUE; } |