Bug #9207 » fix_stackerror.patch
hash.c → hash.c.new | ||
---|---|---|
}
|
||
else if (BUILTIN_TYPE(a) == T_STRING) {
|
||
hnum = rb_str_hash(a);
|
||
}
|
||
else {
|
||
hval = rb_hash(a);
|
||
hnum = FIX2LONG(hval);
|
||
} else {
|
||
#if SIZEOF_LONG_LONG == SIZEOF_VOIDP
|
||
if (BUILTIN_TYPE(a) == T_BIGNUM) {
|
||
int sign;
|
||
unsigned long ul;
|
||
sign = rb_integer_pack(a, &ul, 1, sizeof(ul), 0,
|
||
INTEGER_PACK_NATIVE_BYTE_ORDER);
|
||
ul &= (1UL << (sizeof(long)*CHAR_BIT-1)) - 1;
|
||
hnum = (sign < 0) ? LONG2FIX(-(long)ul) : LONG2FIX((long)ul);
|
||
} else {
|
||
#endif
|
||
hval = rb_hash(a);
|
||
hnum = FIX2LONG(hval);
|
||
}
|
||
}
|
||
hnum <<= 1;
|
||
return (st_index_t)RSHIFT(hnum, 1);
|