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