| Index: src/runtime.cc
|
| diff --git a/src/runtime.cc b/src/runtime.cc
|
| index 568ada8a1165e3c1d2989263cb6ba03cf8df1288..c08c1e67029cf1a15f099b037fadf1a4eb534c50 100644
|
| --- a/src/runtime.cc
|
| +++ b/src/runtime.cc
|
| @@ -245,13 +245,14 @@ MUST_USE_RESULT static MaybeHandle<Object> CreateObjectLiteralBoilerplate(
|
| int length = constant_properties->length();
|
| bool should_transform =
|
| !is_result_from_cache && boilerplate->HasFastProperties();
|
| - if (should_transform || has_function_literal) {
|
| - // Normalize the properties of object to avoid n^2 behavior
|
| - // when extending the object multiple properties. Indicate the number of
|
| - // properties to be added.
|
| + bool should_normalize = should_transform || has_function_literal;
|
| + if (should_normalize) {
|
| + // TODO(verwaest): We might not want to ever normalize here.
|
| JSObject::NormalizeProperties(
|
| boilerplate, KEEP_INOBJECT_PROPERTIES, length / 2);
|
| }
|
| + Object::ValueType value_type = should_normalize
|
| + ? Object::FORCE_TAGGED : Object::OPTIMAL_REPRESENTATION;
|
|
|
| // TODO(verwaest): Support tracking representations in the boilerplate.
|
| for (int index = 0; index < length; index +=2) {
|
| @@ -279,7 +280,7 @@ MUST_USE_RESULT static MaybeHandle<Object> CreateObjectLiteralBoilerplate(
|
| ASSERT(!name->AsArrayIndex(&element_index));
|
| maybe_result = JSObject::SetOwnPropertyIgnoreAttributes(
|
| boilerplate, name, value, NONE,
|
| - Object::OPTIMAL_REPRESENTATION, mode);
|
| + value_type, mode);
|
| }
|
| } else if (key->ToArrayIndex(&element_index)) {
|
| // Array index (uint32).
|
| @@ -295,7 +296,7 @@ MUST_USE_RESULT static MaybeHandle<Object> CreateObjectLiteralBoilerplate(
|
| Handle<String> name = isolate->factory()->NewStringFromAsciiChecked(str);
|
| maybe_result = JSObject::SetOwnPropertyIgnoreAttributes(
|
| boilerplate, name, value, NONE,
|
| - Object::OPTIMAL_REPRESENTATION, mode);
|
| + value_type, mode);
|
| }
|
| // If setting the property on the boilerplate throws an
|
| // exception, the exception is converted to an empty handle in
|
|
|