Revision: 12859
Author:   [email protected]
Date:     Mon Nov  5 07:01:51 2012
Log:      Reduce stack frame size in JSON.stringify.

BUG=

Review URL: https://chromiumcodereview.appspot.com/11366087
http://code.google.com/p/v8/source/detail?r=12859

Modified:
 /branches/bleeding_edge/src/json-stringifier.h

=======================================
--- /branches/bleeding_edge/src/json-stringifier.h      Mon Nov  5 04:59:35 2012
+++ /branches/bleeding_edge/src/json-stringifier.h      Mon Nov  5 07:01:51 2012
@@ -567,28 +567,26 @@
   if (object->HasFastProperties() &&
       !object->HasIndexedInterceptor() &&
       !object->HasNamedInterceptor() &&
-      object->elements() == isolate_->heap()->empty_fixed_array()) {
-    Handle<DescriptorArray> descs(
-        object->map()->instance_descriptors(), isolate_);
-    int num_desc = object->map()->NumberOfOwnDescriptors();
+      object->elements()->length() == 0) {
     Handle<Map> map(object->map());
-    bool map_changed = false;
+    int num_desc = map->NumberOfOwnDescriptors();
     for (int i = 0; i < num_desc; i++) {
-      Handle<String> key(descs->GetKey(i), isolate_);
-      PropertyDetails details = descs->GetDetails(i);
+      Handle<String> key(map->instance_descriptors()->GetKey(i), isolate_);
+      PropertyDetails details = map->instance_descriptors()->GetDetails(i);
       if (details.IsDontEnum() || details.IsDeleted()) continue;
       Handle<Object> property;
-      if (details.type() == FIELD && !map_changed) {
+      if (details.type() == FIELD && *map == object->map()) {
         property = Handle<Object>(
-            object->FastPropertyAt(descs->GetFieldIndex(i)), isolate_);
+                       object->FastPropertyAt(
+                           map->instance_descriptors()->GetFieldIndex(i)),
+                       isolate_);
       } else {
         property = GetProperty(object, key);
+        if (property.is_null()) return EXCEPTION;
       }
-      if (property.is_null()) return EXCEPTION;
       Result result = SerializeProperty(property, comma, key);
       if (!comma && result == SUCCESS) comma = true;
       if (result >= EXCEPTION) return result;
-      if (*map != object->map()) map_changed = true;
     }
   } else {
     bool has_exception = false;

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

Reply via email to