Index: src/hydrogen.h |
diff --git a/src/hydrogen.h b/src/hydrogen.h |
index e2779bb2260d10cfed8b0a048dd641b685e4cba6..82e3119c5d1050c7a98cf146ae05daaf1839a00a 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_; } |
+ HInstruction* entry() { return entry_; } |
+ void set_entry(HInstruction* entry) { entry_ = entry; } |
+ |
+ HInstruction* arguments_elements() { return arguments_elements_; } |
+ void set_arguments_elements(HInstruction* 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. |
+ HInstruction* entry_; |
+ |
+ HInstruction* arguments_elements_; |
+ |
FunctionState* outer_; |
}; |