Chromium Code Reviews| Index: src/full-codegen.h |
| =================================================================== |
| --- src/full-codegen.h (revision 8079) |
| +++ src/full-codegen.h (working copy) |
| @@ -328,17 +328,17 @@ |
| void VisitForEffect(Expression* expr) { |
| EffectContext context(this); |
| - HandleInNonTestContext(expr, NO_REGISTERS); |
| + VisitInSameContext(expr); |
|
Kevin Millikin (Chromium)
2011/05/31 11:46:28
"SameContext" is not quite right because it raises
Sven Panne
2011/05/31 14:30:33
Done.
|
| } |
| void VisitForAccumulatorValue(Expression* expr) { |
| AccumulatorValueContext context(this); |
| - HandleInNonTestContext(expr, TOS_REG); |
| + VisitInSameContext(expr); |
| } |
| void VisitForStackValue(Expression* expr) { |
| StackValueContext context(this); |
| - HandleInNonTestContext(expr, NO_REGISTERS); |
| + VisitInSameContext(expr); |
| } |
| void VisitForControl(Expression* expr, |
| @@ -346,15 +346,9 @@ |
| Label* if_false, |
| Label* fall_through) { |
| TestContext context(this, if_true, if_false, fall_through); |
| - VisitInTestContext(expr); |
| - // Forwarding bailouts to children is a one shot operation. It |
| - // should have been processed at this point. |
| - ASSERT(forward_bailout_pending_ == NULL); |
| + VisitInSameContext(expr); |
| } |
| - void HandleInNonTestContext(Expression* expr, State state); |
| - void VisitInTestContext(Expression* expr); |
| - |
| void VisitDeclarations(ZoneList<Declaration*>* declarations); |
| void DeclareGlobals(Handle<FixedArray> pairs); |
| @@ -549,8 +543,10 @@ |
| void EmitUnaryOperation(UnaryOperation* expr, const char* comment); |
| - // Handles the shortcutted logical binary operations in VisitBinaryOperation. |
| - void EmitLogicalOperation(BinaryOperation* expr); |
| + void VisitComma(BinaryOperation* expr); |
| + void VisitAndOr(BinaryOperation* expr, bool is_logical_and); |
|
Kevin Millikin (Chromium)
2011/05/31 11:46:28
VisitLogicalOperation? We should get Logical in
Sven Panne
2011/05/31 14:30:33
OK, I'm changing HGraphBuilder's corresponding met
|
| + void VisitCommon(BinaryOperation* expr); |
|
Kevin Millikin (Chromium)
2011/05/31 11:46:28
Common is nondescriptive. How about ArithmeticOpe
Sven Panne
2011/05/31 14:30:33
OK, I'll sync HGraphBuilder, too.
|
| + void VisitInSameContext(Expression* expr); |
| void VisitForTypeofValue(Expression* expr); |
| @@ -598,11 +594,6 @@ |
| // context. |
| virtual void DropAndPlug(int count, Register reg) const = 0; |
| - // For shortcutting operations || and &&. |
| - virtual void EmitLogicalLeft(BinaryOperation* expr, |
| - Label* eval_right, |
| - Label* done) const = 0; |
| - |
| // Set up branch labels for a test expression. The three Label** parameters |
| // are output parameters. |
| virtual void PrepareTest(Label* materialize_true, |
| @@ -611,12 +602,14 @@ |
| Label** if_false, |
| Label** fall_through) const = 0; |
| - virtual void HandleExpression(Expression* expr) const = 0; |
| - |
| // Returns true if we are evaluating only for side effects (ie if the result |
| // will be discarded). |
| virtual bool IsEffect() const { return false; } |
| + // Returns true if we are evaluating for the value (in accu/on stack). |
| + virtual bool IsAccumulatorValue() const { return false; } |
| + virtual bool IsStackValue() const { return false; } |
| + |
| // Returns true if we are branching on the value rather than materializing |
| // it. Only used for asserts. |
| virtual bool IsTest() const { return false; } |
| @@ -644,15 +637,12 @@ |
| virtual void Plug(Heap::RootListIndex) const; |
| virtual void PlugTOS() const; |
| virtual void DropAndPlug(int count, Register reg) const; |
| - virtual void EmitLogicalLeft(BinaryOperation* expr, |
| - Label* eval_right, |
| - Label* done) const; |
| virtual void PrepareTest(Label* materialize_true, |
| Label* materialize_false, |
| Label** if_true, |
| Label** if_false, |
| Label** fall_through) const; |
| - virtual void HandleExpression(Expression* expr) const; |
| + virtual bool IsAccumulatorValue() const { return true; } |
| }; |
| class StackValueContext : public ExpressionContext { |
| @@ -668,15 +658,12 @@ |
| virtual void Plug(Heap::RootListIndex) const; |
| virtual void PlugTOS() const; |
| virtual void DropAndPlug(int count, Register reg) const; |
| - virtual void EmitLogicalLeft(BinaryOperation* expr, |
| - Label* eval_right, |
| - Label* done) const; |
| virtual void PrepareTest(Label* materialize_true, |
| Label* materialize_false, |
| Label** if_true, |
| Label** if_false, |
| Label** fall_through) const; |
| - virtual void HandleExpression(Expression* expr) const; |
| + virtual bool IsStackValue() const { return true; } |
| }; |
| class TestContext : public ExpressionContext { |
| @@ -707,15 +694,11 @@ |
| virtual void Plug(Heap::RootListIndex) const; |
| virtual void PlugTOS() const; |
| virtual void DropAndPlug(int count, Register reg) const; |
| - virtual void EmitLogicalLeft(BinaryOperation* expr, |
| - Label* eval_right, |
| - Label* done) const; |
| virtual void PrepareTest(Label* materialize_true, |
| Label* materialize_false, |
| Label** if_true, |
| Label** if_false, |
| Label** fall_through) const; |
| - virtual void HandleExpression(Expression* expr) const; |
| virtual bool IsTest() const { return true; } |
| private: |
| @@ -737,15 +720,11 @@ |
| virtual void Plug(Heap::RootListIndex) const; |
| virtual void PlugTOS() const; |
| virtual void DropAndPlug(int count, Register reg) const; |
| - virtual void EmitLogicalLeft(BinaryOperation* expr, |
| - Label* eval_right, |
| - Label* done) const; |
| virtual void PrepareTest(Label* materialize_true, |
| Label* materialize_false, |
| Label** if_true, |
| Label** if_false, |
| Label** fall_through) const; |
| - virtual void HandleExpression(Expression* expr) const; |
| virtual bool IsEffect() const { return true; } |
| }; |