Simplify V8::FillHeapNumberWithRandom.
authoryangguo@chromium.org <yangguo@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Fri, 9 Mar 2012 09:51:34 +0000 (09:51 +0000)
committeryangguo@chromium.org <yangguo@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Fri, 9 Mar 2012 09:51:34 +0000 (09:51 +0000)
BUG=
TEST=

Review URL: https://chromiumcodereview.appspot.com/9592047

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@10975 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

src/v8.cc

index 003c75c..98b3038 100644 (file)
--- 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;
 }