Revision: 9848
Author:   [email protected]
Date:     Mon Oct 31 07:39:21 2011
Log:      Optimize JS date implementation for smi-only arrays

Review URL: http://codereview.chromium.org/8409010
http://code.google.com/p/v8/source/detail?r=9848

Modified:
 /branches/bleeding_edge/src/date.js
 /branches/bleeding_edge/src/runtime.cc

=======================================
--- /branches/bleeding_edge/src/date.js Fri Oct 28 01:45:04 2011
+++ /branches/bleeding_edge/src/date.js Mon Oct 31 07:39:21 2011
@@ -294,8 +294,8 @@
 }


-var ymd_from_time_cache = [$NaN, $NaN, $NaN];
-var ymd_from_time_cached_time = $NaN;
+var ymd_from_time_cache = [1970, 0, 1];
+var ymd_from_time_cached_time = 0;

 function YearFromTime(t) {
   if (t !== ymd_from_time_cached_time) {
=======================================
--- /branches/bleeding_edge/src/runtime.cc      Mon Oct 31 02:38:52 2011
+++ /branches/bleeding_edge/src/runtime.cc      Mon Oct 31 07:39:21 2011
@@ -7875,19 +7875,14 @@

   FixedArrayBase* elms_base = FixedArrayBase::cast(res_array->elements());
   RUNTIME_ASSERT(elms_base->length() == 3);
-  RUNTIME_ASSERT(res_array->GetElementsKind() <= FAST_DOUBLE_ELEMENTS);
-
-  if (res_array->HasFastDoubleElements()) {
-    FixedDoubleArray* elms = FixedDoubleArray::cast(res_array->elements());
-    elms->set(0, year);
-    elms->set(1, month);
-    elms->set(2, day);
-  } else {
-    FixedArray* elms = FixedArray::cast(res_array->elements());
-    elms->set(0, Smi::FromInt(year));
-    elms->set(1, Smi::FromInt(month));
-    elms->set(2, Smi::FromInt(day));
-  }
+  RUNTIME_ASSERT(res_array->HasFastTypeElements());
+
+  MaybeObject* maybe = res_array->EnsureWritableFastElements();
+  if (maybe->IsFailure()) return maybe;
+  FixedArray* elms = FixedArray::cast(res_array->elements());
+  elms->set(0, Smi::FromInt(year));
+  elms->set(1, Smi::FromInt(month));
+  elms->set(2, Smi::FromInt(day));

   return isolate->heap()->undefined_value();
 }

--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to