| Index: src/hydrogen.h
|
| diff --git a/src/hydrogen.h b/src/hydrogen.h
|
| index 643074c3df878fe431d224f551c9202fa9461eb3..272b1eb02eea292cc1de5693238a2adfc3dc20ff 100644
|
| --- a/src/hydrogen.h
|
| +++ b/src/hydrogen.h
|
| @@ -1666,10 +1666,24 @@ class HGraphBuilder {
|
| };
|
|
|
| ElementsKind kind() { return kind_; }
|
| -
|
| - HValue* AllocateEmptyArray();
|
| - HValue* AllocateArray(HValue* capacity, HValue* length_field,
|
| - FillMode fill_mode = FILL_WITH_HOLE);
|
| + HAllocate* elements_location() { return elements_location_; }
|
| +
|
| + HAllocate* AllocateEmptyArray();
|
| + HAllocate* AllocateArray(HValue* capacity,
|
| + HValue* length_field,
|
| + FillMode fill_mode = FILL_WITH_HOLE);
|
| + // Use these allocators when capacity could be unknown at compile time
|
| + // but its limit is known. For constant |capacity| the value of
|
| + // |capacity_upper_bound| is ignored and the actual |capacity|
|
| + // value is used as an upper bound.
|
| + HAllocate* AllocateArray(HValue* capacity,
|
| + int capacity_upper_bound,
|
| + HValue* length_field,
|
| + FillMode fill_mode = FILL_WITH_HOLE);
|
| + HAllocate* AllocateArray(HValue* capacity,
|
| + HConstant* capacity_upper_bound,
|
| + HValue* length_field,
|
| + FillMode fill_mode = FILL_WITH_HOLE);
|
| HValue* GetElementsLocation() { return elements_location_; }
|
| HValue* EmitMapCode();
|
|
|
| @@ -1686,25 +1700,25 @@ class HGraphBuilder {
|
| }
|
|
|
| HValue* EmitInternalMapCode();
|
| - HValue* EstablishEmptyArrayAllocationSize();
|
| - HValue* EstablishAllocationSize(HValue* length_node);
|
| - HValue* AllocateArray(HValue* size_in_bytes, HValue* capacity,
|
| - HValue* length_field,
|
| - FillMode fill_mode = FILL_WITH_HOLE);
|
|
|
| HGraphBuilder* builder_;
|
| ElementsKind kind_;
|
| AllocationSiteMode mode_;
|
| HValue* allocation_site_payload_;
|
| HValue* constructor_function_;
|
| - HInnerAllocatedObject* elements_location_;
|
| + HAllocate* elements_location_;
|
| };
|
|
|
| HValue* BuildAllocateArrayFromLength(JSArrayBuilder* array_builder,
|
| HValue* length_argument);
|
| + HValue* BuildCalculateElementsSize(ElementsKind kind,
|
| + HValue* capacity);
|
| + HConstant* EstablishHeaderAllocationSize(AllocationSiteMode mode);
|
| + HConstant* EstablishElementsAllocationSize(ElementsKind kind, int capacity);
|
|
|
| - HValue* BuildAllocateElements(ElementsKind kind,
|
| - HValue* capacity);
|
| + HAllocate* BuildAllocateElements(ElementsKind kind,
|
| + HValue* size_in_bytes,
|
| + PretenureFlag pretenure);
|
|
|
| void BuildInitializeElementsHeader(HValue* elements,
|
| ElementsKind kind,
|
| @@ -1713,16 +1727,15 @@ class HGraphBuilder {
|
| HValue* BuildAllocateElementsAndInitializeElementsHeader(ElementsKind kind,
|
| HValue* capacity);
|
|
|
| - // array must have been allocated with enough room for
|
| - // 1) the JSArray, 2) a AllocationMemento if mode requires it,
|
| - // 3) a FixedArray or FixedDoubleArray.
|
| - // A pointer to the Fixed(Double)Array is returned.
|
| - HInnerAllocatedObject* BuildJSArrayHeader(HValue* array,
|
| - HValue* array_map,
|
| - AllocationSiteMode mode,
|
| - ElementsKind elements_kind,
|
| - HValue* allocation_site_payload,
|
| - HValue* length_field);
|
| + // |array| must have been allocated with enough room for
|
| + // 1) the JSArray and 2) an AllocationMemento if mode requires it.
|
| + // Initially the array elements storage is initialized with empty array.
|
| + void BuildJSArrayHeader(HValue* array,
|
| + HValue* array_map,
|
| + AllocationSiteMode mode,
|
| + ElementsKind elements_kind,
|
| + HValue* allocation_site_payload,
|
| + HValue* length_field);
|
|
|
| HValue* BuildGrowElementsCapacity(HValue* object,
|
| HValue* elements,
|
|
|