Index: src/hydrogen.h |
diff --git a/src/hydrogen.h b/src/hydrogen.h |
index bc9bc9de05ecd9046eed2677bc0d14f861eae885..f2cb733acf4683c30482733acb7e503cb7cf3e53 100644 |
--- a/src/hydrogen.h |
+++ b/src/hydrogen.h |
@@ -42,6 +42,7 @@ namespace internal { |
// Forward declarations. |
class BitVector; |
+class FunctionState; |
class HEnvironment; |
class HGraph; |
class HLoopInformation; |
@@ -121,7 +122,7 @@ class HBasicBlock: public ZoneObject { |
void Finish(HControlInstruction* last); |
void FinishExit(HControlInstruction* instruction); |
- void Goto(HBasicBlock* block, bool drop_extra = false); |
+ void Goto(HBasicBlock* block, FunctionState* state = NULL); |
int PredecessorIndexOf(HBasicBlock* predecessor) const; |
void AddSimulate(int ast_id) { AddInstruction(CreateSimulate(ast_id)); } |
@@ -136,7 +137,7 @@ class HBasicBlock: public ZoneObject { |
// instruction and updating the bailout environment. |
void AddLeaveInlined(HValue* return_value, |
HBasicBlock* target, |
- bool drop_extra = false); |
+ FunctionState* state = NULL); |
// If a target block is tagged as an inline function return, all |
// predecessors should contain the inlined exit sequence: |
@@ -715,6 +716,16 @@ class FunctionState { |
FunctionState* outer() { return outer_; } |
+ HEnterInlined* entry() { return entry_; } |
+ void set_entry(HEnterInlined* entry) { entry_ = entry; } |
+ |
+ HArgumentsElements* arguments_elements() { return arguments_elements_; } |
+ void set_arguments_elements(HArgumentsElements* arguments_elements) { |
+ arguments_elements_ = arguments_elements; |
+ } |
+ |
+ bool arguments_pushed() { return arguments_elements() != NULL; } |
+ |
private: |
HGraphBuilder* owner_; |
@@ -741,6 +752,12 @@ class FunctionState { |
// return blocks. NULL in all other cases. |
TestContext* test_context_; |
+ // When inlining HEnterInlined instruction corresponding to the function |
+ // entry. |
+ HEnterInlined* entry_; |
+ |
+ HArgumentsElements* arguments_elements_; |
+ |
FunctionState* outer_; |
}; |
@@ -994,6 +1011,7 @@ class HGraphBuilder: public AstVisitor { |
LookupResult* lookup, |
bool is_store); |
+ void EnsureArgumentsArePushedForAccess(); |
bool TryArgumentsAccess(Property* expr); |
// Try to optimize fun.apply(receiver, arguments) pattern. |