| Index: src/hydrogen.cc
|
| diff --git a/src/hydrogen.cc b/src/hydrogen.cc
|
| index 9851609a3d463f393dd467b08ce3676135754c21..83f91de512f50c169783ccc70158637e1d4ed94f 100644
|
| --- a/src/hydrogen.cc
|
| +++ b/src/hydrogen.cc
|
| @@ -1708,22 +1708,12 @@ HValue* HGraphBuilder::BuildCloneShallowArray(HValue* boilerplate,
|
| if (mode == TRACK_ALLOCATION_SITE) {
|
| size += AllocationMemento::kSize;
|
| }
|
| - int elems_offset = size;
|
| - InstanceType instance_type = IsFastDoubleElementsKind(kind) ?
|
| - FIXED_DOUBLE_ARRAY_TYPE : FIXED_ARRAY_TYPE;
|
| - if (length > 0) {
|
| - size += IsFastDoubleElementsKind(kind)
|
| - ? FixedDoubleArray::SizeFor(length)
|
| - : FixedArray::SizeFor(length);
|
| - }
|
|
|
| - // Allocate both the JS array and the elements array in one big
|
| - // allocation. This avoids multiple limit checks.
|
| HValue* size_in_bytes = Add<HConstant>(size);
|
| HInstruction* object = Add<HAllocate>(size_in_bytes,
|
| HType::JSObject(),
|
| NOT_TENURED,
|
| - instance_type);
|
| + JS_OBJECT_TYPE);
|
|
|
| // Copy the JS array part.
|
| for (int i = 0; i < JSArray::kSize; i += kPointerSize) {
|
| @@ -1740,10 +1730,17 @@ HValue* HGraphBuilder::BuildCloneShallowArray(HValue* boilerplate,
|
| }
|
|
|
| if (length > 0) {
|
| - // Get hold of the elements array of the boilerplate and setup the
|
| - // elements pointer in the resulting object.
|
| HValue* boilerplate_elements = AddLoadElements(boilerplate);
|
| - HValue* object_elements = Add<HInnerAllocatedObject>(object, elems_offset);
|
| + HValue* object_elements;
|
| + if (IsFastDoubleElementsKind(kind)) {
|
| + HValue* elems_size = Add<HConstant>(FixedDoubleArray::SizeFor(length));
|
| + object_elements = Add<HAllocate>(elems_size, HType::JSArray(),
|
| + NOT_TENURED, FIXED_DOUBLE_ARRAY_TYPE);
|
| + } else {
|
| + HValue* elems_size = Add<HConstant>(FixedArray::SizeFor(length));
|
| + object_elements = Add<HAllocate>(elems_size, HType::JSArray(),
|
| + NOT_TENURED, FIXED_ARRAY_TYPE);
|
| + }
|
| Add<HStoreNamedField>(object, HObjectAccess::ForElementsPointer(),
|
| object_elements);
|
|
|
|
|