Home | History | Annotate | Download | only in ast
      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
      3 // found in the LICENSE file.
      4 
      5 #ifndef V8_AST_AST_EXPRESSION_REWRITER_H_
      6 #define V8_AST_AST_EXPRESSION_REWRITER_H_
      7 
      8 #include "src/allocation.h"
      9 #include "src/ast/ast.h"
     10 #include "src/ast/scopes.h"
     11 #include "src/type-info.h"
     12 #include "src/zone/zone.h"
     13 
     14 namespace v8 {
     15 namespace internal {
     16 
     17 // A rewriting Visitor over a CompilationInfo's AST that invokes
     18 // VisitExpression on each expression node.
     19 
     20 // This AstVistor is not final, and provides the AstVisitor methods as virtual
     21 // methods so they can be specialized by subclasses.
     22 class AstExpressionRewriter : public AstVisitor<AstExpressionRewriter> {
     23  public:
     24   explicit AstExpressionRewriter(Isolate* isolate) {
     25     InitializeAstRewriter(isolate);
     26   }
     27   explicit AstExpressionRewriter(uintptr_t stack_limit) {
     28     InitializeAstRewriter(stack_limit);
     29   }
     30   virtual ~AstExpressionRewriter() {}
     31 
     32   virtual void VisitDeclarations(Declaration::List* declarations);
     33   virtual void VisitStatements(ZoneList<Statement*>* statements);
     34   virtual void VisitExpressions(ZoneList<Expression*>* expressions);
     35 
     36   virtual void VisitLiteralProperty(LiteralProperty* property);
     37 
     38  protected:
     39   virtual bool RewriteExpression(Expression* expr) = 0;
     40 
     41  private:
     42   DEFINE_AST_REWRITER_SUBCLASS_MEMBERS();
     43 
     44 #define DECLARE_VISIT(type) virtual void Visit##type(type* node);
     45   AST_NODE_LIST(DECLARE_VISIT)
     46 #undef DECLARE_VISIT
     47 
     48   DISALLOW_COPY_AND_ASSIGN(AstExpressionRewriter);
     49 };
     50 
     51 }  // namespace internal
     52 }  // namespace v8
     53 
     54 #endif  // V8_AST_AST_EXPRESSION_REWRITER_H_
     55