Index: src/hydrogen.h |
diff --git a/src/hydrogen.h b/src/hydrogen.h |
index b3a056fa1b35d2f2c04b98d8a3e1f84f31080b05..fb8545404ce4dde2db15d1c87fca978eee2a67f9 100644 |
--- a/src/hydrogen.h |
+++ b/src/hydrogen.h |
@@ -298,6 +298,7 @@ class HGraph: public ZoneObject { |
HConstant* GetConstantUndefined() const { return undefined_constant_.get(); } |
HConstant* GetConstant0(); |
HConstant* GetConstant1(); |
+ HConstant* GetConstant2(); |
HConstant* GetConstantMinus1(); |
HConstant* GetConstantTrue(); |
HConstant* GetConstantFalse(); |
@@ -419,6 +420,7 @@ class HGraph: public ZoneObject { |
SetOncePointer<HConstant> undefined_constant_; |
SetOncePointer<HConstant> constant_0_; |
SetOncePointer<HConstant> constant_1_; |
+ SetOncePointer<HConstant> constant_2_; |
SetOncePointer<HConstant> constant_minus1_; |
SetOncePointer<HConstant> constant_true_; |
SetOncePointer<HConstant> constant_false_; |
@@ -892,6 +894,8 @@ class HGraphBuilder { |
HBasicBlock* CreateBasicBlock(HEnvironment* env); |
HBasicBlock* CreateLoopHeaderBlock(); |
+ void AddSoftDeoptimize(); |
+ |
// Building common constructs |
HInstruction* BuildExternalArrayElementAccess( |
HValue* external_elements, |
@@ -907,7 +911,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, |
@@ -917,6 +934,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); |
@@ -950,12 +968,15 @@ 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); |
+ void BeginElse(); |
void End(); |
private: |
@@ -1009,16 +1030,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(); |
@@ -1095,8 +1139,6 @@ class HOptimizedGraphBuilder: public HGraphBuilder, public AstVisitor { |
bool inline_bailout() { return inline_bailout_; } |
- void AddSoftDeoptimize(); |
- |
// Bailout environment manipulation. |
void Push(HValue* value) { environment()->Push(value); } |
HValue* Pop() { return environment()->Pop(); } |
@@ -1346,7 +1388,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, |
@@ -1355,6 +1398,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, |