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
