| Index: src/json-stringifier.h
|
| diff --git a/src/json-stringifier.h b/src/json-stringifier.h
|
| index f083ff4916856f820ed8048ffb132ca7803b11d2..1aa72b71b4e08a3f519696488cb2efe2ed3fd0d4 100644
|
| --- a/src/json-stringifier.h
|
| +++ b/src/json-stringifier.h
|
| @@ -567,28 +567,26 @@ BasicJsonStringifier::Result BasicJsonStringifier::SerializeJSObject(
|
| 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;
|
|
|