| OLD | NEW | 
|---|
| 1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 the V8 project authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #ifndef V8_INTERPRETER_BYTECODE_GENERATOR_H_ | 5 #ifndef V8_INTERPRETER_BYTECODE_GENERATOR_H_ | 
| 6 #define V8_INTERPRETER_BYTECODE_GENERATOR_H_ | 6 #define V8_INTERPRETER_BYTECODE_GENERATOR_H_ | 
| 7 | 7 | 
| 8 #include "src/ast/ast.h" | 8 #include "src/ast/ast.h" | 
| 9 #include "src/interpreter/bytecode-array-builder.h" | 9 #include "src/interpreter/bytecode-array-builder.h" | 
| 10 #include "src/interpreter/bytecode-label.h" | 10 #include "src/interpreter/bytecode-label.h" | 
| 11 #include "src/interpreter/bytecode-register.h" | 11 #include "src/interpreter/bytecode-register.h" | 
| 12 #include "src/interpreter/bytecodes.h" | 12 #include "src/interpreter/bytecodes.h" | 
| 13 | 13 | 
| 14 namespace v8 { | 14 namespace v8 { | 
| 15 namespace internal { | 15 namespace internal { | 
| 16 | 16 | 
| 17 class CompilationInfo; | 17 class CompilationInfo; | 
| 18 | 18 | 
| 19 namespace interpreter { | 19 namespace interpreter { | 
| 20 | 20 | 
| 21 class LoopBuilder; | 21 class LoopBuilder; | 
| 22 | 22 | 
| 23 class BytecodeGenerator final : public AstVisitor<BytecodeGenerator> { | 23 class BytecodeGenerator final : public AstVisitor<BytecodeGenerator> { | 
| 24  public: | 24  public: | 
| 25   explicit BytecodeGenerator(CompilationInfo* info); | 25   explicit BytecodeGenerator(CompilationInfo* info); | 
| 26 | 26 | 
| 27   Handle<BytecodeArray> MakeBytecode(); | 27   void GenerateBytecode(); | 
|  | 28   Handle<BytecodeArray> FinalizeBytecode(); | 
| 28 | 29 | 
| 29 #define DECLARE_VISIT(type) void Visit##type(type* node); | 30 #define DECLARE_VISIT(type) void Visit##type(type* node); | 
| 30   AST_NODE_LIST(DECLARE_VISIT) | 31   AST_NODE_LIST(DECLARE_VISIT) | 
| 31 #undef DECLARE_VISIT | 32 #undef DECLARE_VISIT | 
| 32 | 33 | 
| 33   // Visiting function for declarations list and statements are overridden. | 34   // Visiting function for declarations list and statements are overridden. | 
| 34   void VisitDeclarations(ZoneList<Declaration*>* declarations); | 35   void VisitDeclarations(ZoneList<Declaration*>* declarations); | 
| 35   void VisitStatements(ZoneList<Statement*>* statments); | 36   void VisitStatements(ZoneList<Statement*>* statments); | 
| 36 | 37 | 
| 37  private: | 38  private: | 
| 38   class AccumulatorResultScope; | 39   class AccumulatorResultScope; | 
| 39   class ContextScope; | 40   class ContextScope; | 
| 40   class ControlScope; | 41   class ControlScope; | 
| 41   class ControlScopeForBreakable; | 42   class ControlScopeForBreakable; | 
| 42   class ControlScopeForIteration; | 43   class ControlScopeForIteration; | 
| 43   class ControlScopeForTopLevel; | 44   class ControlScopeForTopLevel; | 
| 44   class ControlScopeForTryCatch; | 45   class ControlScopeForTryCatch; | 
| 45   class ControlScopeForTryFinally; | 46   class ControlScopeForTryFinally; | 
| 46   class ExpressionResultScope; | 47   class ExpressionResultScope; | 
| 47   class EffectResultScope; | 48   class EffectResultScope; | 
| 48   class GlobalDeclarationsBuilder; | 49   class GlobalDeclarationsBuilder; | 
| 49   class RegisterResultScope; | 50   class RegisterResultScope; | 
| 50   class RegisterAllocationScope; | 51   class RegisterAllocationScope; | 
| 51 | 52 | 
| 52   void GenerateBytecode(); |  | 
| 53   void GenerateBytecodeBody(); | 53   void GenerateBytecodeBody(); | 
| 54   void FinalizeBytecode(); | 54   void AllocateDeferredConstants(); | 
| 55 | 55 | 
| 56   DEFINE_AST_VISITOR_SUBCLASS_MEMBERS(); | 56   DEFINE_AST_VISITOR_SUBCLASS_MEMBERS(); | 
| 57 | 57 | 
| 58   // Dispatched from VisitBinaryOperation. | 58   // Dispatched from VisitBinaryOperation. | 
| 59   void VisitArithmeticExpression(BinaryOperation* binop); | 59   void VisitArithmeticExpression(BinaryOperation* binop); | 
| 60   void VisitCommaExpression(BinaryOperation* binop); | 60   void VisitCommaExpression(BinaryOperation* binop); | 
| 61   void VisitLogicalOrExpression(BinaryOperation* binop); | 61   void VisitLogicalOrExpression(BinaryOperation* binop); | 
| 62   void VisitLogicalAndExpression(BinaryOperation* binop); | 62   void VisitLogicalAndExpression(BinaryOperation* binop); | 
| 63 | 63 | 
| 64   // Dispatched from VisitUnaryOperation. | 64   // Dispatched from VisitUnaryOperation. | 
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 218   ZoneVector<BytecodeLabel> generator_resume_points_; | 218   ZoneVector<BytecodeLabel> generator_resume_points_; | 
| 219   Register generator_state_; | 219   Register generator_state_; | 
| 220   int loop_depth_; | 220   int loop_depth_; | 
| 221 }; | 221 }; | 
| 222 | 222 | 
| 223 }  // namespace interpreter | 223 }  // namespace interpreter | 
| 224 }  // namespace internal | 224 }  // namespace internal | 
| 225 }  // namespace v8 | 225 }  // namespace v8 | 
| 226 | 226 | 
| 227 #endif  // V8_INTERPRETER_BYTECODE_GENERATOR_H_ | 227 #endif  // V8_INTERPRETER_BYTECODE_GENERATOR_H_ | 
| OLD | NEW | 
|---|