diff options
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | hash.c | 7 | ||||
-rw-r--r-- | object.c | 5 |
3 files changed, 13 insertions, 8 deletions
@@ -1,3 +1,9 @@ +Thu Jan 9 20:31:10 2014 NAKAMURA Usaku <usa@ruby-lang.org> + + * hash.c (rb_objid_hash): should return `long'. brushup r44534. + + * object.c (rb_obj_hash): follow above change. + Thu Jan 9 19:12:37 2014 Koichi Sasada <ko1@atdot.net> * vm.c (rb_vm_pop_cfunc_frame): added. It cares c_return event. @@ -23,7 +29,8 @@ Thu Jan 9 19:12:37 2014 Koichi Sasada <ko1@atdot.net> Thu Jan 9 17:40:28 2014 NAKAMURA Usaku <usa@ruby-lang.org> * hash.c (rb_any_hash): should treat the return value of rb_objid_hash() - as `long', because ruby assumes the object id of an object is `long'. + as `long', because ruby assumes the hash value of the object id of + an object is `long'. this fixes test failures on mswin64 introduced at r44525. Thu Jan 9 09:55:20 2014 Aaron Patterson <aaron@tenderlovemaking.com> @@ -122,7 +122,7 @@ rb_hash(VALUE obj) return hval; } -st_index_t rb_objid_hash(st_index_t index); +long rb_objid_hash(st_index_t index); static st_index_t rb_any_hash(VALUE a) @@ -132,8 +132,7 @@ rb_any_hash(VALUE a) if (SPECIAL_CONST_P(a)) { if (a == Qundef) return 0; - /* assume hnum is long, so need to drop upper dword on LLP64. */ - hnum = (long)rb_objid_hash((st_index_t)a); + hnum = rb_objid_hash((st_index_t)a); } else if (BUILTIN_TYPE(a) == T_STRING) { hnum = rb_str_hash(a); @@ -146,7 +145,7 @@ rb_any_hash(VALUE a) return (st_index_t)RSHIFT(hnum, 1); } -st_index_t +long rb_objid_hash(st_index_t index) { st_index_t hnum = rb_hash_start(index); @@ -161,7 +161,7 @@ rb_obj_equal(VALUE obj1, VALUE obj2) VALUE rb_obj_hash(VALUE obj) { - st_index_t rb_objid_hash(st_index_t index); + long rb_objid_hash(st_index_t index); VALUE oid = rb_obj_id(obj); #if SIZEOF_LONG == SIZEOF_VOIDP st_index_t index = NUM2LONG(oid); @@ -170,8 +170,7 @@ rb_obj_hash(VALUE obj) #else # error not supported #endif - st_index_t h = rb_objid_hash(index); - return LONG2FIX(h); + return LONG2FIX(rb_objid_hash(index)); } /* |