Index: src/hydrogen.cc |
diff --git a/src/hydrogen.cc b/src/hydrogen.cc |
index f7b310003e0c1140936a8c86d51638534acd824a..e5954e94a5712f2f96022f7e5223b0c0bd9122b0 100644 |
--- a/src/hydrogen.cc |
+++ b/src/hydrogen.cc |
@@ -5120,10 +5120,15 @@ void HOptimizedGraphBuilder::VisitArrayLiteral(ArrayLiteral* expr) { |
// pass an empty fixed array to the runtime function instead. |
Handle<FixedArray> constants = isolate()->factory()->empty_fixed_array(); |
int literal_index = expr->literal_index(); |
+ int flags = expr->depth() == 1 |
+ ? ArrayLiteral::kShallowElements |
+ : ArrayLiteral::kNoFlags; |
+ flags |= ArrayLiteral::kDisableMementos; |
Add<HPushArgument>(Add<HConstant>(literals)); |
Add<HPushArgument>(Add<HConstant>(literal_index)); |
Add<HPushArgument>(Add<HConstant>(constants)); |
+ Add<HPushArgument>(Add<HConstant>(flags)); |
// TODO(mvstanton): Consider a flag to turn off creation of any |
// AllocationMementos for this call: we are in crankshaft and should have |
@@ -5131,7 +5136,7 @@ void HOptimizedGraphBuilder::VisitArrayLiteral(ArrayLiteral* expr) { |
Runtime::FunctionId function_id = Runtime::kCreateArrayLiteral; |
literal = Add<HCallRuntime>(isolate()->factory()->empty_string(), |
Runtime::FunctionForId(function_id), |
- 3); |
+ 4); |
// De-opt if elements kind changed from boilerplate_elements_kind. |
Handle<Map> map = Handle<Map>(boilerplate_object->map(), isolate()); |
@@ -9201,7 +9206,7 @@ HInstruction* HOptimizedGraphBuilder::BuildThisFunction() { |
HInstruction* HOptimizedGraphBuilder::BuildFastLiteral( |
Handle<JSObject> boilerplate_object, |
- AllocationSiteContext* site_context) { |
+ AllocationSiteUsageContext* site_context) { |
NoObservableSideEffectsScope no_effects(this); |
InstanceType instance_type = boilerplate_object->map()->instance_type(); |
ASSERT(instance_type == JS_ARRAY_TYPE || instance_type == JS_OBJECT_TYPE); |
@@ -9294,7 +9299,7 @@ void HOptimizedGraphBuilder::BuildInitElementsInObjectHeader( |
void HOptimizedGraphBuilder::BuildEmitInObjectProperties( |
Handle<JSObject> boilerplate_object, |
HInstruction* object, |
- AllocationSiteContext* site_context) { |
+ AllocationSiteUsageContext* site_context) { |
Handle<DescriptorArray> descriptors( |
boilerplate_object->map()->instance_descriptors()); |
int limit = boilerplate_object->map()->NumberOfOwnDescriptors(); |
@@ -9366,7 +9371,7 @@ void HOptimizedGraphBuilder::BuildEmitElements( |
Handle<JSObject> boilerplate_object, |
Handle<FixedArrayBase> elements, |
HValue* object_elements, |
- AllocationSiteContext* site_context) { |
+ AllocationSiteUsageContext* site_context) { |
ElementsKind kind = boilerplate_object->map()->elements_kind(); |
int elements_length = elements->length(); |
HValue* object_elements_length = Add<HConstant>(elements_length); |
@@ -9407,7 +9412,7 @@ void HOptimizedGraphBuilder::BuildEmitFixedArray( |
Handle<FixedArrayBase> elements, |
ElementsKind kind, |
HValue* object_elements, |
- AllocationSiteContext* site_context) { |
+ AllocationSiteUsageContext* site_context) { |
HInstruction* boilerplate_elements = Add<HConstant>(elements); |
int elements_length = elements->length(); |
Handle<FixedArray> fast_elements = Handle<FixedArray>::cast(elements); |