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);
|
||