Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(12)

Side by Side Diff: src/rewriter.cc

Issue 269049: Split the AST LoopStatement type into separate types for do/while,... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 11 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2006-2008 the V8 project authors. All rights reserved. 1 // Copyright 2006-2008 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 93
94 void AstOptimizer::VisitIfStatement(IfStatement* node) { 94 void AstOptimizer::VisitIfStatement(IfStatement* node) {
95 Visit(node->condition()); 95 Visit(node->condition());
96 Visit(node->then_statement()); 96 Visit(node->then_statement());
97 if (node->HasElseStatement()) { 97 if (node->HasElseStatement()) {
98 Visit(node->else_statement()); 98 Visit(node->else_statement());
99 } 99 }
100 } 100 }
101 101
102 102
103 void AstOptimizer::VisitLoopStatement(LoopStatement* node) { 103 void AstOptimizer::VisitDoWhileStatement(DoWhileStatement* node) {
104 Visit(node->cond());
105 Visit(node->body());
106 }
107
108
109 void AstOptimizer::VisitWhileStatement(WhileStatement* node) {
110 has_function_literal_ = false;
111 Visit(node->cond());
112 node->may_have_function_literal_ = has_function_literal_;
113 Visit(node->body());
114 }
115
116
117 void AstOptimizer::VisitForStatement(ForStatement* node) {
104 if (node->init() != NULL) { 118 if (node->init() != NULL) {
105 Visit(node->init()); 119 Visit(node->init());
106 } 120 }
107 if (node->cond() != NULL) { 121 if (node->cond() != NULL) {
108 has_function_literal_ = false; 122 has_function_literal_ = false;
109 Visit(node->cond()); 123 Visit(node->cond());
110 node->may_have_function_literal_ = has_function_literal_; 124 node->may_have_function_literal_ = has_function_literal_;
111 } 125 }
112 if (node->body() != NULL) { 126 Visit(node->body());
113 Visit(node->body());
114 }
115 if (node->next() != NULL) { 127 if (node->next() != NULL) {
116 Visit(node->next()); 128 Visit(node->next());
117 } 129 }
118 } 130 }
119 131
120 132
121 void AstOptimizer::VisitForInStatement(ForInStatement* node) { 133 void AstOptimizer::VisitForInStatement(ForInStatement* node) {
122 Visit(node->each()); 134 Visit(node->each());
123 Visit(node->enumerable()); 135 Visit(node->enumerable());
124 Visit(node->body()); 136 Visit(node->body());
125 } 137 }
126 138
127 139
128 void AstOptimizer::VisitTryCatch(TryCatch* node) { 140 void AstOptimizer::VisitTryCatchStatement(TryCatchStatement* node) {
129 Visit(node->try_block()); 141 Visit(node->try_block());
130 Visit(node->catch_var()); 142 Visit(node->catch_var());
131 Visit(node->catch_block()); 143 Visit(node->catch_block());
132 } 144 }
133 145
134 146
135 void AstOptimizer::VisitTryFinally(TryFinally* node) { 147 void AstOptimizer::VisitTryFinallyStatement(TryFinallyStatement* node) {
136 Visit(node->try_block()); 148 Visit(node->try_block());
137 Visit(node->finally_block()); 149 Visit(node->finally_block());
138 } 150 }
139 151
140 152
141 void AstOptimizer::VisitSwitchStatement(SwitchStatement* node) { 153 void AstOptimizer::VisitSwitchStatement(SwitchStatement* node) {
142 Visit(node->tag()); 154 Visit(node->tag());
143 for (int i = 0; i < node->cases()->length(); i++) { 155 for (int i = 0; i < node->cases()->length(); i++) {
144 CaseClause* clause = node->cases()->at(i); 156 CaseClause* clause = node->cases()->at(i);
145 if (!clause->is_default()) { 157 if (!clause->is_default()) {
(...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after
546 result_assigned_ = true; 558 result_assigned_ = true;
547 return new Assignment(Token::ASSIGN, result_, value, 559 return new Assignment(Token::ASSIGN, result_, value,
548 RelocInfo::kNoPosition); 560 RelocInfo::kNoPosition);
549 } 561 }
550 562
551 // Node visitors. 563 // Node visitors.
552 #define DEF_VISIT(type) \ 564 #define DEF_VISIT(type) \
553 virtual void Visit##type(type* node); 565 virtual void Visit##type(type* node);
554 AST_NODE_LIST(DEF_VISIT) 566 AST_NODE_LIST(DEF_VISIT)
555 #undef DEF_VISIT 567 #undef DEF_VISIT
568
569 void VisitIterationStatement(IterationStatement* stmt);
556 }; 570 };
557 571
558 572
559 void Processor::Process(ZoneList<Statement*>* statements) { 573 void Processor::Process(ZoneList<Statement*>* statements) {
560 for (int i = statements->length() - 1; i >= 0; --i) { 574 for (int i = statements->length() - 1; i >= 0; --i) {
561 Visit(statements->at(i)); 575 Visit(statements->at(i));
562 } 576 }
563 } 577 }
564 578
565 579
(...skipping 23 matching lines...) Expand all
589 // Rewrite both then and else parts (reversed). 603 // Rewrite both then and else parts (reversed).
590 bool save = is_set_; 604 bool save = is_set_;
591 Visit(node->else_statement()); 605 Visit(node->else_statement());
592 bool set_after_then = is_set_; 606 bool set_after_then = is_set_;
593 is_set_ = save; 607 is_set_ = save;
594 Visit(node->then_statement()); 608 Visit(node->then_statement());
595 is_set_ = is_set_ && set_after_then; 609 is_set_ = is_set_ && set_after_then;
596 } 610 }
597 611
598 612
599 613 void Processor::VisitIterationStatement(IterationStatement* node) {
600 614 // Rewrite the body.
601 void Processor::VisitLoopStatement(LoopStatement* node) {
602 // Rewrite loop body statement.
603 bool set_after_loop = is_set_; 615 bool set_after_loop = is_set_;
604 Visit(node->body()); 616 Visit(node->body());
605 is_set_ = is_set_ && set_after_loop; 617 is_set_ = is_set_ && set_after_loop;
606 } 618 }
607 619
608 620
609 void Processor::VisitForInStatement(ForInStatement* node) { 621 void Processor::VisitDoWhileStatement(DoWhileStatement* node) {
610 // Rewrite for-in body statement. 622 VisitIterationStatement(node);
611 bool set_after_for = is_set_;
612 Visit(node->body());
613 is_set_ = is_set_ && set_after_for;
614 } 623 }
615 624
616 625
617 void Processor::VisitTryCatch(TryCatch* node) { 626 void Processor::VisitWhileStatement(WhileStatement* node) {
627 VisitIterationStatement(node);
628 }
629
630
631 void Processor::VisitForStatement(ForStatement* node) {
632 VisitIterationStatement(node);
633 }
634
635
636 void Processor::VisitForInStatement(ForInStatement* node) {
637 VisitIterationStatement(node);
638 }
639
640
641 void Processor::VisitTryCatchStatement(TryCatchStatement* node) {
618 // Rewrite both try and catch blocks (reversed order). 642 // Rewrite both try and catch blocks (reversed order).
619 bool set_after_catch = is_set_; 643 bool set_after_catch = is_set_;
620 Visit(node->catch_block()); 644 Visit(node->catch_block());
621 is_set_ = is_set_ && set_after_catch; 645 is_set_ = is_set_ && set_after_catch;
622 bool save = in_try_; 646 bool save = in_try_;
623 in_try_ = true; 647 in_try_ = true;
624 Visit(node->try_block()); 648 Visit(node->try_block());
625 in_try_ = save; 649 in_try_ = save;
626 } 650 }
627 651
628 652
629 void Processor::VisitTryFinally(TryFinally* node) { 653 void Processor::VisitTryFinallyStatement(TryFinallyStatement* node) {
630 // Rewrite both try and finally block (reversed order). 654 // Rewrite both try and finally block (reversed order).
631 Visit(node->finally_block()); 655 Visit(node->finally_block());
632 bool save = in_try_; 656 bool save = in_try_;
633 in_try_ = true; 657 in_try_ = true;
634 Visit(node->try_block()); 658 Visit(node->try_block());
635 in_try_ = save; 659 in_try_ = save;
636 } 660 }
637 661
638 662
639 void Processor::VisitSwitchStatement(SwitchStatement* node) { 663 void Processor::VisitSwitchStatement(SwitchStatement* node) {
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
822 optimizer.Optimize(body); 846 optimizer.Optimize(body);
823 if (optimizer.HasStackOverflow()) { 847 if (optimizer.HasStackOverflow()) {
824 return false; 848 return false;
825 } 849 }
826 } 850 }
827 return true; 851 return true;
828 } 852 }
829 853
830 854
831 } } // namespace v8::internal 855 } } // namespace v8::internal
OLDNEW
« src/prettyprinter.cc ('K') | « src/prettyprinter.cc ('k') | src/usage-analyzer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698