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 591 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
602 | 602 |
603 class IndentedScope BASE_EMBEDDED { | 603 class IndentedScope BASE_EMBEDDED { |
604 public: | 604 public: |
605 explicit IndentedScope(AstPrinter* printer) : ast_printer_(printer) { | 605 explicit IndentedScope(AstPrinter* printer) : ast_printer_(printer) { |
606 ast_printer_->inc_indent(); | 606 ast_printer_->inc_indent(); |
607 } | 607 } |
608 | 608 |
609 IndentedScope(AstPrinter* printer, const char* txt, AstNode* node = NULL) | 609 IndentedScope(AstPrinter* printer, const char* txt, AstNode* node = NULL) |
610 : ast_printer_(printer) { | 610 : ast_printer_(printer) { |
611 ast_printer_->PrintIndented(txt); | 611 ast_printer_->PrintIndented(txt); |
612 if (node != NULL && node->AsExpression() != NULL) { | |
613 Expression* expr = node->AsExpression(); | |
614 bool printed_first = false; | |
615 if ((expr->type() != NULL) && (expr->type()->IsKnown())) { | |
616 ast_printer_->Print(" (type = "); | |
617 ast_printer_->Print(StaticType::Type2String(expr->type())); | |
618 printed_first = true; | |
619 } | |
620 if (printed_first) ast_printer_->Print(")"); | |
621 } | |
622 ast_printer_->Print("\n"); | 612 ast_printer_->Print("\n"); |
623 ast_printer_->inc_indent(); | 613 ast_printer_->inc_indent(); |
624 } | 614 } |
625 | 615 |
626 virtual ~IndentedScope() { | 616 virtual ~IndentedScope() { |
627 ast_printer_->dec_indent(); | 617 ast_printer_->dec_indent(); |
628 } | 618 } |
629 | 619 |
630 private: | 620 private: |
631 AstPrinter* ast_printer_; | 621 AstPrinter* ast_printer_; |
(...skipping 25 matching lines...) Expand all Loading... |
657 bool quote) { | 647 bool quote) { |
658 PrintIndented(info); | 648 PrintIndented(info); |
659 Print(" "); | 649 Print(" "); |
660 PrintLiteral(value, quote); | 650 PrintLiteral(value, quote); |
661 Print("\n"); | 651 Print("\n"); |
662 } | 652 } |
663 | 653 |
664 | 654 |
665 void AstPrinter::PrintLiteralWithModeIndented(const char* info, | 655 void AstPrinter::PrintLiteralWithModeIndented(const char* info, |
666 Variable* var, | 656 Variable* var, |
667 Handle<Object> value, | 657 Handle<Object> value) { |
668 StaticType* type) { | |
669 if (var == NULL) { | 658 if (var == NULL) { |
670 PrintLiteralIndented(info, value, true); | 659 PrintLiteralIndented(info, value, true); |
671 } else { | 660 } else { |
672 EmbeddedVector<char, 256> buf; | 661 EmbeddedVector<char, 256> buf; |
673 int pos = OS::SNPrintF(buf, "%s (mode = %s", info, | 662 int pos = OS::SNPrintF(buf, "%s (mode = %s", info, |
674 Variable::Mode2String(var->mode())); | 663 Variable::Mode2String(var->mode())); |
675 if (type->IsKnown()) { | |
676 pos += OS::SNPrintF(buf + pos, ", type = %s", | |
677 StaticType::Type2String(type)); | |
678 } | |
679 OS::SNPrintF(buf + pos, ")"); | 664 OS::SNPrintF(buf + pos, ")"); |
680 PrintLiteralIndented(buf.start(), value, true); | 665 PrintLiteralIndented(buf.start(), value, true); |
681 } | 666 } |
682 } | 667 } |
683 | 668 |
684 | 669 |
685 void AstPrinter::PrintLabelsIndented(const char* info, ZoneStringList* labels) { | 670 void AstPrinter::PrintLabelsIndented(const char* info, ZoneStringList* labels) { |
686 if (labels != NULL && labels->length() > 0) { | 671 if (labels != NULL && labels->length() > 0) { |
687 if (info == NULL) { | 672 if (info == NULL) { |
688 PrintIndented("LABELS "); | 673 PrintIndented("LABELS "); |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
725 } | 710 } |
726 } | 711 } |
727 } | 712 } |
728 | 713 |
729 | 714 |
730 void AstPrinter::PrintParameters(Scope* scope) { | 715 void AstPrinter::PrintParameters(Scope* scope) { |
731 if (scope->num_parameters() > 0) { | 716 if (scope->num_parameters() > 0) { |
732 IndentedScope indent(this, "PARAMS"); | 717 IndentedScope indent(this, "PARAMS"); |
733 for (int i = 0; i < scope->num_parameters(); i++) { | 718 for (int i = 0; i < scope->num_parameters(); i++) { |
734 PrintLiteralWithModeIndented("VAR", scope->parameter(i), | 719 PrintLiteralWithModeIndented("VAR", scope->parameter(i), |
735 scope->parameter(i)->name(), | 720 scope->parameter(i)->name()); |
736 scope->parameter(i)->type()); | |
737 } | 721 } |
738 } | 722 } |
739 } | 723 } |
740 | 724 |
741 | 725 |
742 void AstPrinter::PrintStatements(ZoneList<Statement*>* statements) { | 726 void AstPrinter::PrintStatements(ZoneList<Statement*>* statements) { |
743 for (int i = 0; i < statements->length(); i++) { | 727 for (int i = 0; i < statements->length(); i++) { |
744 Visit(statements->at(i)); | 728 Visit(statements->at(i)); |
745 } | 729 } |
746 } | 730 } |
(...skipping 23 matching lines...) Expand all Loading... |
770 IndentedScope indent(this, block_txt); | 754 IndentedScope indent(this, block_txt); |
771 PrintStatements(node->statements()); | 755 PrintStatements(node->statements()); |
772 } | 756 } |
773 | 757 |
774 | 758 |
775 void AstPrinter::VisitDeclaration(Declaration* node) { | 759 void AstPrinter::VisitDeclaration(Declaration* node) { |
776 if (node->fun() == NULL) { | 760 if (node->fun() == NULL) { |
777 // var or const declarations | 761 // var or const declarations |
778 PrintLiteralWithModeIndented(Variable::Mode2String(node->mode()), | 762 PrintLiteralWithModeIndented(Variable::Mode2String(node->mode()), |
779 node->proxy()->AsVariable(), | 763 node->proxy()->AsVariable(), |
780 node->proxy()->name(), | 764 node->proxy()->name()); |
781 node->proxy()->AsVariable()->type()); | |
782 } else { | 765 } else { |
783 // function declarations | 766 // function declarations |
784 PrintIndented("FUNCTION "); | 767 PrintIndented("FUNCTION "); |
785 PrintLiteral(node->proxy()->name(), true); | 768 PrintLiteral(node->proxy()->name(), true); |
786 Print(" = function "); | 769 Print(" = function "); |
787 PrintLiteral(node->fun()->name(), false); | 770 PrintLiteral(node->fun()->name(), false); |
788 Print("\n"); | 771 Print("\n"); |
789 } | 772 } |
790 } | 773 } |
791 | 774 |
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
989 | 972 |
990 | 973 |
991 void AstPrinter::VisitSlot(Slot* node) { | 974 void AstPrinter::VisitSlot(Slot* node) { |
992 PrintIndented("SLOT "); | 975 PrintIndented("SLOT "); |
993 PrettyPrinter::VisitSlot(node); | 976 PrettyPrinter::VisitSlot(node); |
994 Print("\n"); | 977 Print("\n"); |
995 } | 978 } |
996 | 979 |
997 | 980 |
998 void AstPrinter::VisitVariableProxy(VariableProxy* node) { | 981 void AstPrinter::VisitVariableProxy(VariableProxy* node) { |
999 PrintLiteralWithModeIndented("VAR PROXY", node->AsVariable(), node->name(), | 982 PrintLiteralWithModeIndented("VAR PROXY", node->AsVariable(), node->name()); |
1000 node->type()); | |
1001 Variable* var = node->var(); | 983 Variable* var = node->var(); |
1002 if (var != NULL && var->rewrite() != NULL) { | 984 if (var != NULL && var->rewrite() != NULL) { |
1003 IndentedScope indent(this); | 985 IndentedScope indent(this); |
1004 Visit(var->rewrite()); | 986 Visit(var->rewrite()); |
1005 } | 987 } |
1006 } | 988 } |
1007 | 989 |
1008 | 990 |
1009 void AstPrinter::VisitAssignment(Assignment* node) { | 991 void AstPrinter::VisitAssignment(Assignment* node) { |
1010 IndentedScope indent(this, Token::Name(node->op()), node); | 992 IndentedScope indent(this, Token::Name(node->op()), node); |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1056 } | 1038 } |
1057 | 1039 |
1058 | 1040 |
1059 void AstPrinter::VisitIncrementOperation(IncrementOperation* node) { | 1041 void AstPrinter::VisitIncrementOperation(IncrementOperation* node) { |
1060 UNREACHABLE(); | 1042 UNREACHABLE(); |
1061 } | 1043 } |
1062 | 1044 |
1063 | 1045 |
1064 void AstPrinter::VisitCountOperation(CountOperation* node) { | 1046 void AstPrinter::VisitCountOperation(CountOperation* node) { |
1065 EmbeddedVector<char, 128> buf; | 1047 EmbeddedVector<char, 128> buf; |
1066 if (node->type()->IsKnown()) { | 1048 OS::SNPrintF(buf, "%s %s", (node->is_prefix() ? "PRE" : "POST"), |
1067 OS::SNPrintF(buf, "%s %s (type = %s)", | 1049 Token::Name(node->op())); |
1068 (node->is_prefix() ? "PRE" : "POST"), | |
1069 Token::Name(node->op()), | |
1070 StaticType::Type2String(node->type())); | |
1071 } else { | |
1072 OS::SNPrintF(buf, "%s %s", (node->is_prefix() ? "PRE" : "POST"), | |
1073 Token::Name(node->op())); | |
1074 } | |
1075 PrintIndentedVisit(buf.start(), node->expression()); | 1050 PrintIndentedVisit(buf.start(), node->expression()); |
1076 } | 1051 } |
1077 | 1052 |
1078 | 1053 |
1079 void AstPrinter::VisitBinaryOperation(BinaryOperation* node) { | 1054 void AstPrinter::VisitBinaryOperation(BinaryOperation* node) { |
1080 IndentedScope indent(this, Token::Name(node->op()), node); | 1055 IndentedScope indent(this, Token::Name(node->op()), node); |
1081 Visit(node->left()); | 1056 Visit(node->left()); |
1082 Visit(node->right()); | 1057 Visit(node->right()); |
1083 } | 1058 } |
1084 | 1059 |
(...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1521 AddAttribute("mode", Variable::Mode2String(decl->mode())); | 1496 AddAttribute("mode", Variable::Mode2String(decl->mode())); |
1522 } | 1497 } |
1523 Visit(decl->proxy()); | 1498 Visit(decl->proxy()); |
1524 if (decl->fun() != NULL) Visit(decl->fun()); | 1499 if (decl->fun() != NULL) Visit(decl->fun()); |
1525 } | 1500 } |
1526 | 1501 |
1527 | 1502 |
1528 #endif // DEBUG | 1503 #endif // DEBUG |
1529 | 1504 |
1530 } } // namespace v8::internal | 1505 } } // namespace v8::internal |
OLD | NEW |