blob: 1da3fa82474646725f9713a40415eb9b9a38480a [file] [log] [blame]
Ben Murdoch4a90d5f2016-03-22 12:00:34 +00001// 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"
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000011#include "src/type-info.h"
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000012#include "src/zone.h"
13
14namespace v8 {
15namespace internal {
16
17// A rewriting Visitor over a CompilationInfo's AST that invokes
18// VisitExpression on each expression node.
19
20class AstExpressionRewriter : public AstVisitor {
21 public:
22 explicit AstExpressionRewriter(Isolate* isolate) : AstVisitor() {
23 InitializeAstRewriter(isolate);
24 }
25 explicit AstExpressionRewriter(uintptr_t stack_limit) : AstVisitor() {
26 InitializeAstRewriter(stack_limit);
27 }
28 ~AstExpressionRewriter() override {}
29
30 void VisitDeclarations(ZoneList<Declaration*>* declarations) override;
31 void VisitStatements(ZoneList<Statement*>* statements) override;
32 void VisitExpressions(ZoneList<Expression*>* expressions) override;
33
34 virtual void VisitObjectLiteralProperty(ObjectLiteralProperty* property);
35
36 protected:
37 virtual bool RewriteExpression(Expression* expr) = 0;
38
39 private:
40 DEFINE_AST_REWRITER_SUBCLASS_MEMBERS();
41
42#define DECLARE_VISIT(type) void Visit##type(type* node) override;
43 AST_NODE_LIST(DECLARE_VISIT)
44#undef DECLARE_VISIT
45
46 DISALLOW_COPY_AND_ASSIGN(AstExpressionRewriter);
47};
48
49} // namespace internal
50} // namespace v8
51
52#endif // V8_AST_AST_EXPRESSION_REWRITER_H_