Revision: 14664
Author:   [email protected]
Date:     Tue May 14 08:03:27 2013
Log:      Avoid convertion to double when it is not needed.

[email protected]

Review URL: https://codereview.chromium.org/15162002
http://code.google.com/p/v8/source/detail?r=14664

Modified:
 /branches/bleeding_edge/src/factory.h
 /branches/bleeding_edge/src/runtime.cc

=======================================
--- /branches/bleeding_edge/src/factory.h       Wed May  8 08:02:08 2013
+++ /branches/bleeding_edge/src/factory.h       Tue May 14 08:03:27 2013
@@ -266,10 +266,12 @@
                                   PretenureFlag pretenure = NOT_TENURED);
   Handle<Object> NewNumberFromUint(uint32_t value,
                                   PretenureFlag pretenure = NOT_TENURED);
-
+  inline Handle<Object> NewNumberFromSize(size_t value,
+                                   PretenureFlag pretenure = NOT_TENURED);
   Handle<HeapNumber> NewHeapNumber(double value,
                                    PretenureFlag pretenure = NOT_TENURED);

+
   // These objects are used by the api to create env-independent data
   // structures in the heap.
   Handle<JSObject> NewNeanderObject();
@@ -539,6 +541,18 @@
 };


+Handle<Object> Factory::NewNumberFromSize(size_t value,
+                                          PretenureFlag pretenure) {
+  if (Smi::IsValid(static_cast<intptr_t>(value))) {
+    return Handle<Object>(Smi::FromIntptr(static_cast<intptr_t>(value)),
+                          isolate());
+  } else {
+    return NewNumber(static_cast<double>(value), pretenure);
+  }
+}
+
+
+
 } }  // namespace v8::internal

 #endif  // V8_FACTORY_H_
=======================================
--- /branches/bleeding_edge/src/runtime.cc      Tue May 14 04:45:33 2013
+++ /branches/bleeding_edge/src/runtime.cc      Tue May 14 08:03:27 2013
@@ -857,9 +857,9 @@
   ASSERT(byte_length % elementSize == 0);
   size_t length = byte_length / elementSize;

-  Handle<Object> length_obj =
-      isolate->factory()->NewNumber(static_cast<double>(length));
+ Handle<Object> length_obj = isolate->factory()->NewNumberFromSize(length);
   holder->set_length(*length_obj);
+
   Handle<ExternalArray> elements =
       isolate->factory()->NewExternalArray(
           static_cast<int>(length), arrayType,

--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to