| 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.
|
|
|