Index: src/interpreter/bytecode-generator.h |
diff --git a/src/interpreter/bytecode-generator.h b/src/interpreter/bytecode-generator.h |
index e79ff787e9246ba278bddfa09a3e48daf21a7fc2..8c5c3b0e7777cc9e54d20d1f777e1da01275b3dc 100644 |
--- a/src/interpreter/bytecode-generator.h |
+++ b/src/interpreter/bytecode-generator.h |
@@ -31,14 +31,17 @@ class BytecodeGenerator : public AstVisitor { |
class ContextScope; |
class ControlScope; |
class ControlScopeForIteration; |
+ class ExpressionResultScope; |
+ class EffectResultScope; |
+ class AccumulatorResultScope; |
+ class RegisterResultScope; |
void MakeBytecodeBody(); |
Register NextContextRegister() const; |
DEFINE_AST_VISITOR_SUBCLASS_MEMBERS(); |
- Register VisitArguments(ZoneList<Expression*>* arguments, |
- TemporaryRegisterScope* caller_scope); |
+ Register VisitArguments(ZoneList<Expression*>* arguments); |
void VisitArithmeticExpression(BinaryOperation* binop); |
void VisitCommaExpression(BinaryOperation* binop); |
void VisitLogicalOrExpression(BinaryOperation* binop); |
@@ -61,6 +64,20 @@ class BytecodeGenerator : public AstVisitor { |
void VisitTypeOf(UnaryOperation* expr); |
void VisitNot(UnaryOperation* expr); |
+ // Visitors for obtaining expression result in the accumulator, in a |
+ // register, or just getting the effect. |
+ void VisitForAccumulatorValue(Expression* expression); |
+ MUST_USE_RESULT Register VisitForRegisterValue(Expression* expression); |
+ void VisitForEffect(Expression* node); |
+ |
+ // Methods marking the start and end of binary expressions. |
+ void PrepareForBinaryExpression(); |
+ void CompleteBinaryExpression(); |
+ |
+ // Methods for tracking and remapping register. |
+ void RecordStoreToRegister(Register reg); |
+ Register LoadFromAliasedRegister(Register reg); |
+ |
inline BytecodeArrayBuilder* builder() { return &builder_; } |
inline Isolate* isolate() const { return isolate_; } |
@@ -79,6 +96,10 @@ class BytecodeGenerator : public AstVisitor { |
inline void set_execution_context(ContextScope* context) { |
execution_context_ = context; |
} |
+ inline void set_execution_result(ExpressionResultScope* execution_result) { |
+ execution_result_ = execution_result; |
+ } |
+ ExpressionResultScope* execution_result() const { return execution_result_; } |
ZoneVector<Handle<Object>>* globals() { return &globals_; } |
inline LanguageMode language_mode() const; |
@@ -93,6 +114,10 @@ class BytecodeGenerator : public AstVisitor { |
ZoneVector<Handle<Object>> globals_; |
ControlScope* execution_control_; |
ContextScope* execution_context_; |
+ ExpressionResultScope* execution_result_; |
+ |
+ int binary_expression_depth_; |
+ ZoneSet<int> binary_expression_hazard_set_; |
}; |
} // namespace interpreter |