| Index: src/utils.cc
|
| diff --git a/src/utils.cc b/src/utils.cc
|
| index b9964dbb51a886b3047cb13b2b76d36354b21f6b..00fcdb53625d4ccc8d31f212f8057e94263513eb 100644
|
| --- a/src/utils.cc
|
| +++ b/src/utils.cc
|
| @@ -375,4 +375,24 @@ void init_memcopy_functions() {
|
| }
|
|
|
|
|
| +bool DoubleToBoolean(double d) {
|
| + // NaN, +0, and -0 should return the false object
|
| +#if __BYTE_ORDER == __LITTLE_ENDIAN
|
| + union IeeeDoubleLittleEndianArchType u;
|
| +#elif __BYTE_ORDER == __BIG_ENDIAN
|
| + union IeeeDoubleBigEndianArchType u;
|
| +#endif
|
| + u.d = d;
|
| + if (u.bits.exp == 2047) {
|
| + // Detect NaN for IEEE double precision floating point.
|
| + if ((u.bits.man_low | u.bits.man_high) != 0) return false;
|
| + }
|
| + if (u.bits.exp == 0) {
|
| + // Detect +0, and -0 for IEEE double precision floating point.
|
| + if ((u.bits.man_low | u.bits.man_high) == 0) return false;
|
| + }
|
| + return true;
|
| +}
|
| +
|
| +
|
| } } // namespace v8::internal
|
|
|