Index: src/runtime.cc |
diff --git a/src/runtime.cc b/src/runtime.cc |
index 893e31be5cd740e8d28192a4799c9cd59d614bf5..d860245815fd8f33d4ba72737468cab351ef3eeb 100644 |
--- a/src/runtime.cc |
+++ b/src/runtime.cc |
@@ -251,6 +251,9 @@ MUST_USE_RESULT static MaybeHandle<Object> CreateObjectLiteralBoilerplate( |
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) { |
Handle<Object> key(constant_properties->get(index+0), isolate); |
@@ -280,7 +283,8 @@ MUST_USE_RESULT static MaybeHandle<Object> CreateObjectLiteralBoilerplate( |
Handle<String> name(String::cast(*key)); |
ASSERT(!name->AsArrayIndex(&element_index)); |
maybe_result = JSObject::SetOwnPropertyIgnoreAttributes( |
- boilerplate, name, value, NONE, mode); |
+ boilerplate, name, value, NONE, |
+ value_type, mode); |
} |
} else if (key->ToArrayIndex(&element_index)) { |
// Array index (uint32). |
@@ -299,7 +303,7 @@ MUST_USE_RESULT static MaybeHandle<Object> CreateObjectLiteralBoilerplate( |
const char* str = DoubleToCString(num, buffer); |
Handle<String> name = isolate->factory()->NewStringFromAsciiChecked(str); |
maybe_result = JSObject::SetOwnPropertyIgnoreAttributes( |
- boilerplate, name, value, NONE, mode); |
+ boilerplate, name, value, NONE, value_type, mode); |
} |
// If setting the property on the boilerplate throws an |
// exception, the exception is converted to an empty handle in |
@@ -568,8 +572,8 @@ static MaybeHandle<JSObject> CreateArrayLiteralImpl(Isolate* isolate, |
AllocationSiteUsageContext usage_context(isolate, site, enable_mementos); |
usage_context.EnterNewScope(); |
JSObject::DeepCopyHints hints = (flags & ArrayLiteral::kShallowElements) == 0 |
- ? JSObject::kNoHints |
- : JSObject::kObjectIsShallow; |
+ ? JSObject::kNoHints |
+ : JSObject::kObjectIsShallowArray; |
MaybeHandle<JSObject> copy = JSObject::DeepCopy(boilerplate, &usage_context, |
hints); |
usage_context.ExitScope(site, boilerplate); |
@@ -5089,6 +5093,7 @@ RUNTIME_FUNCTION(Runtime_DefineDataPropertyUnchecked) { |
isolate, result, |
JSObject::SetOwnPropertyIgnoreAttributes( |
js_object, name, obj_value, attr, |
+ Object::OPTIMAL_REPRESENTATION, |
ALLOW_AS_CONSTANT, |
JSReceiver::PERFORM_EXTENSIBILITY_CHECK, |
JSReceiver::MAY_BE_STORE_FROM_KEYED, |
@@ -5244,8 +5249,9 @@ MaybeHandle<Object> Runtime::DefineObjectProperty( |
} else { |
if (name->IsString()) name = String::Flatten(Handle<String>::cast(name)); |
return JSObject::SetOwnPropertyIgnoreAttributes( |
- js_object, name, value, attr, ALLOW_AS_CONSTANT, |
- JSReceiver::PERFORM_EXTENSIBILITY_CHECK, store_from_keyed); |
+ js_object, name, value, attr, Object::OPTIMAL_REPRESENTATION, |
+ ALLOW_AS_CONSTANT, JSReceiver::PERFORM_EXTENSIBILITY_CHECK, |
+ store_from_keyed); |
} |
} |
@@ -5260,8 +5266,9 @@ MaybeHandle<Object> Runtime::DefineObjectProperty( |
SLOPPY, false, DEFINE_PROPERTY); |
} else { |
return JSObject::SetOwnPropertyIgnoreAttributes( |
- js_object, name, value, attr, ALLOW_AS_CONSTANT, |
- JSReceiver::PERFORM_EXTENSIBILITY_CHECK, store_from_keyed); |
+ js_object, name, value, attr, Object::OPTIMAL_REPRESENTATION, |
+ ALLOW_AS_CONSTANT, JSReceiver::PERFORM_EXTENSIBILITY_CHECK, |
+ store_from_keyed); |
} |
} |
@@ -13093,8 +13100,10 @@ RUNTIME_FUNCTION(Runtime_DebugReferencedBy) { |
// Get the constructor function for context extension and arguments array. |
+ Handle<JSObject> arguments_boilerplate( |
+ isolate->sloppy_arguments_boilerplate()); |
Handle<JSFunction> arguments_function( |
- JSFunction::cast(isolate->sloppy_arguments_map()->constructor())); |
+ JSFunction::cast(arguments_boilerplate->map()->constructor())); |
// Get the number of referencing objects. |
int count; |