| Index: src/hydrogen.h
|
| diff --git a/src/hydrogen.h b/src/hydrogen.h
|
| index 7f5326bcb5422053548ae3e086cf646b7c48ffa2..0072c77cc24926b49a4576f3f0edc54d93ac52f5 100644
|
| --- a/src/hydrogen.h
|
| +++ b/src/hydrogen.h
|
| @@ -909,7 +909,20 @@ class HGraphBuilder {
|
| HValue* val,
|
| HValue* dependency,
|
| ElementsKind elements_kind,
|
| - bool is_store);
|
| + bool is_store,
|
| + KeyedAccessStoreMode store_mode);
|
| +
|
| + HValue* BuildCheckForCapacityGrow(HValue* object,
|
| + HValue* elements,
|
| + ElementsKind kind,
|
| + HValue* length,
|
| + HValue* key,
|
| + bool is_js_array);
|
| +
|
| + HValue* BuildCopyElementsOnWrite(HValue* object,
|
| + HValue* elements,
|
| + ElementsKind kind,
|
| + HValue* length);
|
|
|
| HInstruction* BuildUncheckedMonomorphicElementAccess(
|
| HValue* object,
|
| @@ -919,6 +932,7 @@ class HGraphBuilder {
|
| bool is_js_array,
|
| ElementsKind elements_kind,
|
| bool is_store,
|
| + KeyedAccessStoreMode store_mode,
|
| Representation checked_index_representation = Representation::None());
|
|
|
| HInstruction* BuildStoreMap(HValue* object, HValue* map, BailoutId id);
|
| @@ -931,8 +945,9 @@ class HGraphBuilder {
|
| if (!finished_) End();
|
| }
|
|
|
| - void CheckNotUndefined(HValue* value);
|
| - void CheckIntegerEq(HValue* left, HValue* right);
|
| + HValue* CheckNotUndefined(HValue* value);
|
| + HValue* CheckIntegerCompare(HValue* left, HValue* right, Token::Value op);
|
| + HValue* CheckIntegerEq(HValue* left, HValue* right);
|
| void End();
|
|
|
| private:
|
| @@ -952,12 +967,14 @@ class HGraphBuilder {
|
| if (!finished_) End();
|
| }
|
|
|
| - HInstruction* BeginTrue(
|
| + HInstruction* BeginIf(
|
| HValue* left,
|
| HValue* right,
|
| Token::Value token,
|
| Representation input_representation = Representation::Integer32());
|
| - void BeginFalse();
|
| + HInstruction* BeginIfObjectsEqual(HValue* left, HValue* right);
|
| + HInstruction* BeginIfMapEquals(HValue* value, Handle<Map> map);
|
| + void BeginElse();
|
| void End();
|
|
|
| private:
|
| @@ -965,6 +982,7 @@ class HGraphBuilder {
|
|
|
| HGraphBuilder* builder_;
|
| bool finished_;
|
| + bool did_else_;
|
| HBasicBlock* first_true_block_;
|
| HBasicBlock* last_true_block_;
|
| HBasicBlock* first_false_block_;
|
| @@ -1011,16 +1029,39 @@ class HGraphBuilder {
|
| bool finished_;
|
| };
|
|
|
| - HValue* BuildAllocateElements(HContext* context,
|
| - ElementsKind kind,
|
| - HValue* capacity);
|
| + HValue* BuildNewElementsCapacity(HValue* context,
|
| + HValue* old_capacity);
|
| +
|
| + void BuildNewSpaceArrayCheck(HValue* length,
|
| + ElementsKind kind);
|
|
|
| - void BuildCopyElements(HContext* context,
|
| + HValue* BuildAllocateElements(HValue* context,
|
| + ElementsKind kind,
|
| + HValue* capacity,
|
| + BailoutId ast_id);
|
| +
|
| + HValue* BuildGrowElementsCapacity(HValue* object,
|
| + HValue* elements,
|
| + ElementsKind kind,
|
| + HValue* length,
|
| + HValue* new_capacity,
|
| + BailoutId ast_id);
|
| +
|
| + void BuildFillElementsWithHole(HValue* context,
|
| + HValue* elements,
|
| + ElementsKind elements_kind,
|
| + HValue* from,
|
| + HValue* to,
|
| + BailoutId ast_id);
|
| +
|
| + void BuildCopyElements(HValue* context,
|
| HValue* from_elements,
|
| ElementsKind from_elements_kind,
|
| HValue* to_elements,
|
| ElementsKind to_elements_kind,
|
| - HValue* length);
|
| + HValue* length,
|
| + HValue* capacity,
|
| + BailoutId ast_id);
|
|
|
| private:
|
| HGraphBuilder();
|
| @@ -1348,7 +1389,8 @@ class HOptimizedGraphBuilder: public HGraphBuilder, public AstVisitor {
|
| HValue* val,
|
| HValue* dependency,
|
| Handle<Map> map,
|
| - bool is_store);
|
| + bool is_store,
|
| + KeyedAccessStoreMode store_mode);
|
|
|
| HValue* HandlePolymorphicElementAccess(HValue* object,
|
| HValue* key,
|
| @@ -1357,6 +1399,7 @@ class HOptimizedGraphBuilder: public HGraphBuilder, public AstVisitor {
|
| BailoutId ast_id,
|
| int position,
|
| bool is_store,
|
| + KeyedAccessStoreMode store_mode,
|
| bool* has_side_effects);
|
|
|
| HValue* HandleKeyedElementAccess(HValue* obj,
|
|
|