OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/ast/prettyprinter.h" | 5 #include "src/ast/prettyprinter.h" |
6 | 6 |
7 #include <stdarg.h> | 7 #include <stdarg.h> |
8 | 8 |
9 #include "src/ast/ast-value-factory.h" | 9 #include "src/ast/ast-value-factory.h" |
10 #include "src/ast/scopes.h" | 10 #include "src/ast/scopes.h" |
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
185 | 185 |
186 | 186 |
187 void CallPrinter::VisitForInStatement(ForInStatement* node) { | 187 void CallPrinter::VisitForInStatement(ForInStatement* node) { |
188 Find(node->each()); | 188 Find(node->each()); |
189 Find(node->enumerable()); | 189 Find(node->enumerable()); |
190 Find(node->body()); | 190 Find(node->body()); |
191 } | 191 } |
192 | 192 |
193 | 193 |
194 void CallPrinter::VisitForOfStatement(ForOfStatement* node) { | 194 void CallPrinter::VisitForOfStatement(ForOfStatement* node) { |
195 Find(node->each()); | |
196 Find(node->assign_iterator()); | 195 Find(node->assign_iterator()); |
| 196 Find(node->next_result()); |
| 197 Find(node->result_done()); |
| 198 Find(node->assign_each()); |
197 Find(node->body()); | 199 Find(node->body()); |
198 Find(node->next_result()); | |
199 } | 200 } |
200 | 201 |
201 | 202 |
202 void CallPrinter::VisitTryCatchStatement(TryCatchStatement* node) { | 203 void CallPrinter::VisitTryCatchStatement(TryCatchStatement* node) { |
203 Find(node->try_block()); | 204 Find(node->try_block()); |
204 Find(node->catch_block()); | 205 Find(node->catch_block()); |
205 } | 206 } |
206 | 207 |
207 | 208 |
208 void CallPrinter::VisitTryFinallyStatement(TryFinallyStatement* node) { | 209 void CallPrinter::VisitTryFinallyStatement(TryFinallyStatement* node) { |
(...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
668 Print("for ("); | 669 Print("for ("); |
669 Visit(node->each()); | 670 Visit(node->each()); |
670 Print(" in "); | 671 Print(" in "); |
671 Visit(node->enumerable()); | 672 Visit(node->enumerable()); |
672 Print(") "); | 673 Print(") "); |
673 Visit(node->body()); | 674 Visit(node->body()); |
674 } | 675 } |
675 | 676 |
676 | 677 |
677 void PrettyPrinter::VisitForOfStatement(ForOfStatement* node) { | 678 void PrettyPrinter::VisitForOfStatement(ForOfStatement* node) { |
| 679 // TODO(adamk): ForOf is largely desugared as part of parsing, |
| 680 // so it's hard to display useful stuff here. Should likely |
| 681 // either bite the bullet and display less or try harder |
| 682 // to preserve more. |
678 PrintLabels(node->labels()); | 683 PrintLabels(node->labels()); |
679 Print("for ("); | 684 // The <each> is embedded inside a do-expression by the time we get here. |
680 Visit(node->each()); | 685 Print("for (<each> of "); |
681 Print(" of "); | 686 if (node->assign_iterator()->IsAssignment() && |
682 Visit(node->iterable()); | 687 node->assign_iterator()->AsAssignment()->value()->IsCall() && |
| 688 node->assign_iterator() |
| 689 ->AsAssignment() |
| 690 ->value() |
| 691 ->AsCall() |
| 692 ->expression() |
| 693 ->IsProperty() && |
| 694 node->assign_iterator() |
| 695 ->AsAssignment() |
| 696 ->value() |
| 697 ->AsCall() |
| 698 ->expression() |
| 699 ->IsProperty()) { |
| 700 Visit(node->assign_iterator() |
| 701 ->AsAssignment() |
| 702 ->value() |
| 703 ->AsCall() |
| 704 ->expression() |
| 705 ->AsProperty() |
| 706 ->obj()); |
| 707 } else { |
| 708 Print("<iterable>"); |
| 709 } |
683 Print(") "); | 710 Print(") "); |
684 Visit(node->body()); | 711 Visit(node->body()); |
685 } | 712 } |
686 | 713 |
687 | 714 |
688 void PrettyPrinter::VisitTryCatchStatement(TryCatchStatement* node) { | 715 void PrettyPrinter::VisitTryCatchStatement(TryCatchStatement* node) { |
689 Print("try "); | 716 Print("try "); |
690 Visit(node->try_block()); | 717 Visit(node->try_block()); |
691 Print(" catch ("); | 718 Print(" catch ("); |
692 const bool quote = false; | 719 const bool quote = false; |
(...skipping 708 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1401 PrintIndentedVisit("FOR", node->each()); | 1428 PrintIndentedVisit("FOR", node->each()); |
1402 PrintIndentedVisit("IN", node->enumerable()); | 1429 PrintIndentedVisit("IN", node->enumerable()); |
1403 PrintIndentedVisit("BODY", node->body()); | 1430 PrintIndentedVisit("BODY", node->body()); |
1404 } | 1431 } |
1405 | 1432 |
1406 | 1433 |
1407 void AstPrinter::VisitForOfStatement(ForOfStatement* node) { | 1434 void AstPrinter::VisitForOfStatement(ForOfStatement* node) { |
1408 IndentedScope indent(this, "FOR OF", node->position()); | 1435 IndentedScope indent(this, "FOR OF", node->position()); |
1409 PrintIndented("YIELD COUNT"); | 1436 PrintIndented("YIELD COUNT"); |
1410 Print(" %d\n", node->yield_count()); | 1437 Print(" %d\n", node->yield_count()); |
1411 PrintIndentedVisit("FOR", node->each()); | |
1412 PrintIndentedVisit("OF", node->iterable()); | |
1413 PrintIndentedVisit("BODY", node->body()); | |
1414 PrintIndentedVisit("INIT", node->assign_iterator()); | 1438 PrintIndentedVisit("INIT", node->assign_iterator()); |
1415 PrintIndentedVisit("NEXT", node->next_result()); | 1439 PrintIndentedVisit("NEXT", node->next_result()); |
| 1440 PrintIndentedVisit("DONE", node->result_done()); |
1416 PrintIndentedVisit("EACH", node->assign_each()); | 1441 PrintIndentedVisit("EACH", node->assign_each()); |
1417 PrintIndentedVisit("DONE", node->result_done()); | 1442 PrintIndentedVisit("BODY", node->body()); |
1418 } | 1443 } |
1419 | 1444 |
1420 | 1445 |
1421 void AstPrinter::VisitTryCatchStatement(TryCatchStatement* node) { | 1446 void AstPrinter::VisitTryCatchStatement(TryCatchStatement* node) { |
1422 IndentedScope indent(this, "TRY CATCH", node->position()); | 1447 IndentedScope indent(this, "TRY CATCH", node->position()); |
1423 PrintIndentedVisit("TRY", node->try_block()); | 1448 PrintIndentedVisit("TRY", node->try_block()); |
1424 PrintLiteralWithModeIndented("CATCHVAR", | 1449 PrintLiteralWithModeIndented("CATCHVAR", |
1425 node->variable(), | 1450 node->variable(), |
1426 node->variable()->name()); | 1451 node->variable()->name()); |
1427 PrintIndentedVisit("CATCH", node->catch_block()); | 1452 PrintIndentedVisit("CATCH", node->catch_block()); |
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1721 | 1746 |
1722 void AstPrinter::VisitRewritableExpression(RewritableExpression* node) { | 1747 void AstPrinter::VisitRewritableExpression(RewritableExpression* node) { |
1723 Visit(node->expression()); | 1748 Visit(node->expression()); |
1724 } | 1749 } |
1725 | 1750 |
1726 | 1751 |
1727 #endif // DEBUG | 1752 #endif // DEBUG |
1728 | 1753 |
1729 } // namespace internal | 1754 } // namespace internal |
1730 } // namespace v8 | 1755 } // namespace v8 |
OLD | NEW |