| 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
 | 
|  
 | 
|  
 | 
| 
 |