| Index: src/v8.cc
|
| diff --git a/src/v8.cc b/src/v8.cc
|
| index 003c75ce0b36b7567113cb0b3c1c191b3c36c24b..98b30385937f47767ffaa53c5f7d9d08b986ab40 100644
|
| --- a/src/v8.cc
|
| +++ b/src/v8.cc
|
| @@ -223,19 +223,17 @@ typedef union {
|
|
|
| Object* V8::FillHeapNumberWithRandom(Object* heap_number,
|
| Context* context) {
|
| + double_int_union r;
|
| uint64_t random_bits = Random(context);
|
| - // Make a double* from address (heap_number + sizeof(double)).
|
| - double_int_union* r = reinterpret_cast<double_int_union*>(
|
| - reinterpret_cast<char*>(heap_number) +
|
| - HeapNumber::kValueOffset - kHeapObjectTag);
|
| // Convert 32 random bits to 0.(32 random bits) in a double
|
| // by computing:
|
| // ( 1.(20 0s)(32 random bits) x 2^20 ) - (1.0 x 2^20)).
|
| - const double binary_million = 1048576.0;
|
| - r->double_value = binary_million;
|
| - r->uint64_t_value |= random_bits;
|
| - r->double_value -= binary_million;
|
| + static const double binary_million = 1048576.0;
|
| + r.double_value = binary_million;
|
| + r.uint64_t_value |= random_bits;
|
| + r.double_value -= binary_million;
|
|
|
| + HeapNumber::cast(heap_number)->set_value(r.double_value);
|
| return heap_number;
|
| }
|
|
|
|
|