Index: src/data-flow.h |
=================================================================== |
--- src/data-flow.h (revision 4066) |
+++ src/data-flow.h (working copy) |
@@ -40,7 +40,6 @@ |
public: |
explicit BitVector(int length) |
: length_(length), bits_(Vector<uint32_t>::New(1 + length / 32)) { |
- ASSERT(length > 0); |
for (int i = 0; i < bits_.length(); i++) { |
bits_[i] = 0; |
} |
@@ -497,6 +496,41 @@ |
}; |
+// Computes the set of assigned variables and annotates variables proxies |
+// that are trivial sub-expressions and for-loops where the loop variable |
+// is guaranteed to be a smi. |
+class AssignedVariablesAnalyzer : public AstVisitor { |
+ public: |
+ explicit AssignedVariablesAnalyzer(FunctionLiteral* fun); |
+ |
+ void Analyze(); |
+ |
+ private: |
+ Variable* FindSmiLoopVariable(ForStatement* stmt); |
+ |
+ int BitIndex(Variable* var); |
+ |
+ void RecordAssignedVar(Variable* var); |
+ |
+ void MarkIfTrivial(Expression* expr); |
+ |
+ // Visits an expression saving the accumulator before, clearing |
+ // it before visting and restoring it after visiting. |
+ void ProcessExpression(Expression* expr); |
+ |
+ // AST node visit functions. |
+#define DECLARE_VISIT(type) virtual void Visit##type(type* node); |
+ AST_NODE_LIST(DECLARE_VISIT) |
+#undef DECLARE_VISIT |
+ |
+ FunctionLiteral* fun_; |
+ |
+ // Accumulator for assigned variables set. |
+ BitVector av_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(AssignedVariablesAnalyzer); |
+}; |
+ |
} } // namespace v8::internal |