Chromium Code Reviews| Index: src/feedbackslots.h |
| diff --git a/src/rewriter.h b/src/feedbackslots.h |
| similarity index 65% |
| copy from src/rewriter.h |
| copy to src/feedbackslots.h |
| index 59914d97f9155cbdbc785e9a4272f0698f1c3a6a..1e73afc36396cc5c8c7b04f9fb6569fc538857b8 100644 |
| --- a/src/rewriter.h |
| +++ b/src/feedbackslots.h |
| @@ -1,4 +1,4 @@ |
| -// Copyright 2011 the V8 project authors. All rights reserved. |
| +// Copyright 2014 the V8 project authors. All rights reserved. |
| // Redistribution and use in source and binary forms, with or without |
| // modification, are permitted provided that the following conditions are |
| // met: |
| @@ -25,23 +25,41 @@ |
| // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| -#ifndef V8_REWRITER_H_ |
| -#define V8_REWRITER_H_ |
| +#ifndef V8_FEEDBACKSLOTS_H_ |
| +#define V8_FEEDBACKSLOTS_H_ |
| +#include "ast.h" |
| namespace v8 { |
| namespace internal { |
| -class CompilationInfo; |
| - |
| -class Rewriter { |
| +class FeedbackSlotAllocator: public AstVisitor { |
| public: |
| - // Rewrite top-level code (ECMA 262 "programs") so as to conservatively |
| - // include an assignment of the value of the last statement in the code to |
| - // a compiler-generated temporary variable wherever needed. |
| + // Allocate feedback slots for ast nodes that require them. |
| // |
| // Assumes code has been parsed and scopes have been analyzed. Mutates the |
| // AST, so the AST should not continue to be used in the case of failure. |
| - static bool Rewrite(CompilationInfo* info); |
| + static bool Run(CompilationInfo* info); |
| + |
| + private: |
| + explicit FeedbackSlotAllocator(Zone* zone) : used_(0) { |
|
danno
2014/01/28 08:27:17
I worry that the additional pass over the AST migh
mvstanton
2014/01/30 15:13:41
Although it didn't appear to cost much (nodes in t
|
| + InitializeAstVisitor(zone); |
| + } |
| + |
| + int slot_count() const { return used_; } |
| + |
| + // AST node visit functions. |
| +#define DECLARE_VISIT(type) virtual void Visit##type(type* node) { \ |
| + used_ = node->ConsumeFeedbackSlots(isolate(), used_); \ |
| + DoVisit##type(node); \ |
| + } \ |
| + void DoVisit##type(type* node); |
| + AST_NODE_LIST(DECLARE_VISIT) |
| +#undef DECLARE_VISIT |
| + |
| + int used_; |
| + |
| + DEFINE_AST_VISITOR_SUBCLASS_MEMBERS(); |
| + DISALLOW_COPY_AND_ASSIGN(FeedbackSlotAllocator); |
| }; |