diff options
Diffstat (limited to 'chromium/v8/src/ast-literal-reindexer.h')
-rw-r--r-- | chromium/v8/src/ast-literal-reindexer.h | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/chromium/v8/src/ast-literal-reindexer.h b/chromium/v8/src/ast-literal-reindexer.h new file mode 100644 index 00000000000..59b214fecdd --- /dev/null +++ b/chromium/v8/src/ast-literal-reindexer.h @@ -0,0 +1,46 @@ +// Copyright 2015 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef V8_AST_LITERAL_REINDEXER +#define V8_AST_LITERAL_REINDEXER + +#include "src/v8.h" + +#include "src/ast.h" +#include "src/scopes.h" + +namespace v8 { +namespace internal { + +class AstLiteralReindexer final : public AstVisitor { + public: + AstLiteralReindexer() : AstVisitor(), next_index_(0) {} + + int count() const { return next_index_; } + void Reindex(Expression* pattern); + + private: +#define DEFINE_VISIT(type) virtual void Visit##type(type* node) override; + AST_NODE_LIST(DEFINE_VISIT) +#undef DEFINE_VISIT + + void VisitStatements(ZoneList<Statement*>* statements) override; + void VisitDeclarations(ZoneList<Declaration*>* declarations) override; + void VisitArguments(ZoneList<Expression*>* arguments); + void VisitObjectLiteralProperty(ObjectLiteralProperty* property); + + void UpdateIndex(MaterializedLiteral* literal) { + literal->literal_index_ = next_index_++; + } + + void Visit(AstNode* node) override { node->Accept(this); } + + int next_index_; + + DISALLOW_COPY_AND_ASSIGN(AstLiteralReindexer); +}; +} +} // namespace v8::internal + +#endif // V8_AST_LITERAL_REINDEXER |