diff --git a/ChangeLog b/ChangeLog index 88e64abd1c..7ec6eec2fb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Thu Jan 9 20:31:10 2014 NAKAMURA Usaku + + * 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 * 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 Thu Jan 9 17:40:28 2014 NAKAMURA Usaku * 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 diff --git a/hash.c b/hash.c index 7074413ce1..87f51284de 100644 --- a/hash.c +++ b/hash.c @@ -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); diff --git a/object.c b/object.c index 1398201c83..5b5e283c67 100644 --- a/object.c +++ b/object.c @@ -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)); } /*