Index: src/rewriter.cc |
=================================================================== |
--- src/rewriter.cc (revision 3045) |
+++ src/rewriter.cc (working copy) |
@@ -100,7 +100,21 @@ |
} |
-void AstOptimizer::VisitLoopStatement(LoopStatement* node) { |
+void AstOptimizer::VisitDoWhileStatement(DoWhileStatement* node) { |
+ Visit(node->cond()); |
+ Visit(node->body()); |
+} |
+ |
+ |
+void AstOptimizer::VisitWhileStatement(WhileStatement* node) { |
+ has_function_literal_ = false; |
+ Visit(node->cond()); |
+ node->may_have_function_literal_ = has_function_literal_; |
+ Visit(node->body()); |
+} |
+ |
+ |
+void AstOptimizer::VisitForStatement(ForStatement* node) { |
if (node->init() != NULL) { |
Visit(node->init()); |
} |
@@ -109,9 +123,7 @@ |
Visit(node->cond()); |
node->may_have_function_literal_ = has_function_literal_; |
} |
- if (node->body() != NULL) { |
- Visit(node->body()); |
- } |
+ Visit(node->body()); |
if (node->next() != NULL) { |
Visit(node->next()); |
} |
@@ -125,14 +137,14 @@ |
} |
-void AstOptimizer::VisitTryCatch(TryCatch* node) { |
+void AstOptimizer::VisitTryCatchStatement(TryCatchStatement* node) { |
Visit(node->try_block()); |
Visit(node->catch_var()); |
Visit(node->catch_block()); |
} |
-void AstOptimizer::VisitTryFinally(TryFinally* node) { |
+void AstOptimizer::VisitTryFinallyStatement(TryFinallyStatement* node) { |
Visit(node->try_block()); |
Visit(node->finally_block()); |
} |
@@ -553,6 +565,8 @@ |
virtual void Visit##type(type* node); |
AST_NODE_LIST(DEF_VISIT) |
#undef DEF_VISIT |
+ |
+ void VisitIterationStatement(IterationStatement* stmt); |
}; |
@@ -596,25 +610,35 @@ |
} |
- |
- |
-void Processor::VisitLoopStatement(LoopStatement* node) { |
- // Rewrite loop body statement. |
+void Processor::VisitIterationStatement(IterationStatement* node) { |
+ // Rewrite the body. |
bool set_after_loop = is_set_; |
Visit(node->body()); |
is_set_ = is_set_ && set_after_loop; |
} |
+void Processor::VisitDoWhileStatement(DoWhileStatement* node) { |
+ VisitIterationStatement(node); |
+} |
+ |
+ |
+void Processor::VisitWhileStatement(WhileStatement* node) { |
+ VisitIterationStatement(node); |
+} |
+ |
+ |
+void Processor::VisitForStatement(ForStatement* node) { |
+ VisitIterationStatement(node); |
+} |
+ |
+ |
void Processor::VisitForInStatement(ForInStatement* node) { |
- // Rewrite for-in body statement. |
- bool set_after_for = is_set_; |
- Visit(node->body()); |
- is_set_ = is_set_ && set_after_for; |
+ VisitIterationStatement(node); |
} |
-void Processor::VisitTryCatch(TryCatch* node) { |
+void Processor::VisitTryCatchStatement(TryCatchStatement* node) { |
// Rewrite both try and catch blocks (reversed order). |
bool set_after_catch = is_set_; |
Visit(node->catch_block()); |
@@ -626,7 +650,7 @@ |
} |
-void Processor::VisitTryFinally(TryFinally* node) { |
+void Processor::VisitTryFinallyStatement(TryFinallyStatement* node) { |
// Rewrite both try and finally block (reversed order). |
Visit(node->finally_block()); |
bool save = in_try_; |