| OLD | NEW |
| 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 572 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 583 PrintStatements(clause->statements()); | 583 PrintStatements(clause->statements()); |
| 584 if (clause->statements()->length() > 0) | 584 if (clause->statements()->length() > 0) |
| 585 Print(" "); | 585 Print(" "); |
| 586 } | 586 } |
| 587 | 587 |
| 588 | 588 |
| 589 //----------------------------------------------------------------------------- | 589 //----------------------------------------------------------------------------- |
| 590 | 590 |
| 591 class IndentedScope BASE_EMBEDDED { | 591 class IndentedScope BASE_EMBEDDED { |
| 592 public: | 592 public: |
| 593 IndentedScope() { | 593 explicit IndentedScope(AstPrinter* printer) : ast_printer_(printer) { |
| 594 ast_printer_->inc_indent(); | 594 ast_printer_->inc_indent(); |
| 595 } | 595 } |
| 596 | 596 |
| 597 explicit IndentedScope(const char* txt, AstNode* node = NULL) { | 597 explicit IndentedScope(const char* txt, AstNode* node = NULL) { |
| 598 ast_printer_->PrintIndented(txt); | 598 ast_printer_->PrintIndented(txt); |
| 599 if (node != NULL && node->AsExpression() != NULL) { | 599 if (node != NULL && node->AsExpression() != NULL) { |
| 600 Expression* expr = node->AsExpression(); | 600 Expression* expr = node->AsExpression(); |
| 601 bool printed_first = false; | 601 bool printed_first = false; |
| 602 if ((expr->type() != NULL) && (expr->type()->IsKnown())) { | 602 if ((expr->type() != NULL) && (expr->type()->IsKnown())) { |
| 603 ast_printer_->Print(" (type = "); | 603 ast_printer_->Print(" (type = "); |
| 604 ast_printer_->Print(StaticType::Type2String(expr->type())); | 604 ast_printer_->Print(StaticType::Type2String(expr->type())); |
| 605 printed_first = true; | 605 printed_first = true; |
| 606 } | 606 } |
| 607 if (expr->num() != AstNode::kNoNumber) { | 607 if (expr->num() != AstNode::kNoNumber) { |
| 608 ast_printer_->Print(printed_first ? ", num = " : " (num = "); | 608 ast_printer_->Print(printed_first ? ", num = " : " (num = "); |
| 609 ast_printer_->Print("%d", expr->num()); | 609 ast_printer_->Print("%d", expr->num()); |
| 610 printed_first = true; | 610 printed_first = true; |
| 611 } | 611 } |
| 612 if (printed_first) ast_printer_->Print(")"); | 612 if (printed_first) ast_printer_->Print(")"); |
| 613 } | 613 } |
| 614 ast_printer_->Print("\n"); | 614 ast_printer_->Print("\n"); |
| 615 ast_printer_->inc_indent(); | 615 ast_printer_->inc_indent(); |
| 616 } | 616 } |
| 617 | 617 |
| 618 virtual ~IndentedScope() { | 618 virtual ~IndentedScope() { |
| 619 ast_printer_->dec_indent(); | 619 ast_printer_->dec_indent(); |
| 620 } | 620 } |
| 621 | 621 |
| 622 static void SetAstPrinter(AstPrinter* a) { ast_printer_ = a; } | |
| 623 | |
| 624 private: | 622 private: |
| 625 static AstPrinter* ast_printer_; | 623 AstPrinter* ast_printer_; |
| 626 }; | 624 }; |
| 627 | 625 |
| 628 | 626 |
| 629 AstPrinter* IndentedScope::ast_printer_ = NULL; | |
| 630 | |
| 631 | |
| 632 //----------------------------------------------------------------------------- | 627 //----------------------------------------------------------------------------- |
| 633 | 628 |
| 634 int AstPrinter::indent_ = 0; | |
| 635 | 629 |
| 636 | 630 AstPrinter::AstPrinter() : indent_(0) { |
| 637 AstPrinter::AstPrinter() { | |
| 638 ASSERT(indent_ == 0); | |
| 639 IndentedScope::SetAstPrinter(this); | |
| 640 } | 631 } |
| 641 | 632 |
| 642 | 633 |
| 643 AstPrinter::~AstPrinter() { | 634 AstPrinter::~AstPrinter() { |
| 644 ASSERT(indent_ == 0); | 635 ASSERT(indent_ == 0); |
| 645 IndentedScope::SetAstPrinter(NULL); | |
| 646 } | 636 } |
| 647 | 637 |
| 648 | 638 |
| 649 void AstPrinter::PrintIndented(const char* txt) { | 639 void AstPrinter::PrintIndented(const char* txt) { |
| 650 for (int i = 0; i < indent_; i++) { | 640 for (int i = 0; i < indent_; i++) { |
| 651 Print(". "); | 641 Print(". "); |
| 652 } | 642 } |
| 653 Print(txt); | 643 Print(txt); |
| 654 } | 644 } |
| 655 | 645 |
| (...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1023 } | 1013 } |
| 1024 Print("\n"); | 1014 Print("\n"); |
| 1025 } | 1015 } |
| 1026 | 1016 |
| 1027 | 1017 |
| 1028 void AstPrinter::VisitVariableProxy(VariableProxy* node) { | 1018 void AstPrinter::VisitVariableProxy(VariableProxy* node) { |
| 1029 PrintLiteralWithModeIndented("VAR PROXY", node->AsVariable(), node->name(), | 1019 PrintLiteralWithModeIndented("VAR PROXY", node->AsVariable(), node->name(), |
| 1030 node->type(), node->num(), node->IsPrimitive()); | 1020 node->type(), node->num(), node->IsPrimitive()); |
| 1031 Variable* var = node->var(); | 1021 Variable* var = node->var(); |
| 1032 if (var != NULL && var->rewrite() != NULL) { | 1022 if (var != NULL && var->rewrite() != NULL) { |
| 1033 IndentedScope indent; | 1023 IndentedScope indent(this); |
| 1034 Visit(var->rewrite()); | 1024 Visit(var->rewrite()); |
| 1035 } | 1025 } |
| 1036 } | 1026 } |
| 1037 | 1027 |
| 1038 | 1028 |
| 1039 void AstPrinter::VisitAssignment(Assignment* node) { | 1029 void AstPrinter::VisitAssignment(Assignment* node) { |
| 1040 IndentedScope indent(Token::Name(node->op()), node); | 1030 IndentedScope indent(Token::Name(node->op()), node); |
| 1041 Visit(node->target()); | 1031 Visit(node->target()); |
| 1042 Visit(node->value()); | 1032 Visit(node->value()); |
| 1043 } | 1033 } |
| (...skipping 25 matching lines...) Expand all Loading... |
| 1069 | 1059 |
| 1070 void AstPrinter::VisitCallNew(CallNew* node) { | 1060 void AstPrinter::VisitCallNew(CallNew* node) { |
| 1071 IndentedScope indent("CALL NEW"); | 1061 IndentedScope indent("CALL NEW"); |
| 1072 Visit(node->expression()); | 1062 Visit(node->expression()); |
| 1073 PrintArguments(node->arguments()); | 1063 PrintArguments(node->arguments()); |
| 1074 } | 1064 } |
| 1075 | 1065 |
| 1076 | 1066 |
| 1077 void AstPrinter::VisitCallRuntime(CallRuntime* node) { | 1067 void AstPrinter::VisitCallRuntime(CallRuntime* node) { |
| 1078 PrintLiteralIndented("CALL RUNTIME ", node->name(), false); | 1068 PrintLiteralIndented("CALL RUNTIME ", node->name(), false); |
| 1079 IndentedScope indent; | 1069 IndentedScope indent(this); |
| 1080 PrintArguments(node->arguments()); | 1070 PrintArguments(node->arguments()); |
| 1081 } | 1071 } |
| 1082 | 1072 |
| 1083 | 1073 |
| 1084 void AstPrinter::VisitUnaryOperation(UnaryOperation* node) { | 1074 void AstPrinter::VisitUnaryOperation(UnaryOperation* node) { |
| 1085 PrintIndentedVisit(Token::Name(node->op()), node->expression()); | 1075 PrintIndentedVisit(Token::Name(node->op()), node->expression()); |
| 1086 } | 1076 } |
| 1087 | 1077 |
| 1088 | 1078 |
| 1089 void AstPrinter::VisitCountOperation(CountOperation* node) { | 1079 void AstPrinter::VisitCountOperation(CountOperation* node) { |
| (...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1522 AddAttribute("mode", Variable::Mode2String(decl->mode())); | 1512 AddAttribute("mode", Variable::Mode2String(decl->mode())); |
| 1523 } | 1513 } |
| 1524 Visit(decl->proxy()); | 1514 Visit(decl->proxy()); |
| 1525 if (decl->fun() != NULL) Visit(decl->fun()); | 1515 if (decl->fun() != NULL) Visit(decl->fun()); |
| 1526 } | 1516 } |
| 1527 | 1517 |
| 1528 | 1518 |
| 1529 #endif // DEBUG | 1519 #endif // DEBUG |
| 1530 | 1520 |
| 1531 } } // namespace v8::internal | 1521 } } // namespace v8::internal |
| OLD | NEW |