Index: src/parsing/parser.cc |
diff --git a/src/parsing/parser.cc b/src/parsing/parser.cc |
index 778da5f8f0db1360787c353ec49403ae4b834503..b4987d65e238d3c7e29c5da7121b9143387ad174 100644 |
--- a/src/parsing/parser.cc |
+++ b/src/parsing/parser.cc |
@@ -7,8 +7,8 @@ |
#include "src/api.h" |
#include "src/ast/ast.h" |
#include "src/ast/ast-expression-rewriter.h" |
-#include "src/ast/ast-expression-visitor.h" |
#include "src/ast/ast-literal-reindexer.h" |
+#include "src/ast/ast-traversal-visitor.h" |
#include "src/ast/scopeinfo.h" |
#include "src/bailout-reason.h" |
#include "src/base/platform/platform.h" |
@@ -4637,30 +4637,32 @@ Statement* Parser::BuildAssertIsCoercible(Variable* var) { |
} |
-class InitializerRewriter : public AstExpressionVisitor { |
+class InitializerRewriter final |
+ : public AstTraversalVisitor<InitializerRewriter> { |
public: |
InitializerRewriter(uintptr_t stack_limit, Expression* root, Parser* parser, |
Scope* scope) |
- : AstExpressionVisitor(stack_limit, root), |
+ : AstTraversalVisitor(stack_limit, root), |
parser_(parser), |
scope_(scope) {} |
- private: |
- void VisitExpression(Expression* expr) override { |
- RewritableExpression* to_rewrite = expr->AsRewritableExpression(); |
- if (to_rewrite == nullptr || to_rewrite->is_rewritten()) return; |
- |
+ protected: |
+ // Just rewrite destructuring assignments wrapped in RewritableExpressions. |
+ void VisitRewritableExpression(RewritableExpression* to_rewrite) { |
+ if (to_rewrite->is_rewritten()) return; |
Parser::PatternRewriter::RewriteDestructuringAssignment(parser_, to_rewrite, |
scope_); |
} |
// Code in function literals does not need to be eagerly rewritten, it will be |
// rewritten when scheduled. |
- void VisitFunctionLiteral(FunctionLiteral* expr) override {} |
+ void VisitFunctionLiteral(FunctionLiteral* expr) {} |
private: |
Parser* parser_; |
Scope* scope_; |
+ |
+ DEFINE_AST_VISITOR_DISPATCH() |
}; |