| Index: src/objects.cc
|
| ===================================================================
|
| --- src/objects.cc (revision 2555)
|
| +++ src/objects.cc (working copy)
|
| @@ -7060,20 +7060,16 @@
|
| if (value->IsSmi()) {
|
| int_value = Smi::cast(value)->value();
|
| } else if (value->IsHeapNumber()) {
|
| - static const DoubleRepresentation nan(OS::nan_value());
|
| - DoubleRepresentation double_value = HeapNumber::cast(value)->value();
|
| - if (nan.bits != double_value.bits) {
|
| - int_value = static_cast<int>(double_value.value + 0.5);
|
| - } else {
|
| - // NaN clamps to zero.
|
| - int_value = 0;
|
| + double double_value = HeapNumber::cast(value)->value();
|
| + if (!isnan(double_value)) {
|
| + // NaN clamps to zero (default). Other doubles are rounded to
|
| + // the nearest integer.
|
| + int_value = static_cast<int>(double_value + 0.5);
|
| }
|
| - } else if (value->IsUndefined()) {
|
| - int_value = 0;
|
| } else {
|
| - // All other types have been converted to a number type further up in the
|
| - // call chain.
|
| - UNREACHABLE();
|
| + // Clamp undefined to zero (default). All other types have been
|
| + // converted to a number type further up in the call chain.
|
| + ASSERT(value->IsUndefined());
|
| }
|
| if (int_value < 0) {
|
| clamped_value = 0;
|
|
|