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 508 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
519 | 519 |
520 void PrettyPrinter::PrintLiteral(Handle<Object> value, bool quote) { | 520 void PrettyPrinter::PrintLiteral(Handle<Object> value, bool quote) { |
521 Object* object = *value; | 521 Object* object = *value; |
522 if (object->IsString()) { | 522 if (object->IsString()) { |
523 String* string = String::cast(object); | 523 String* string = String::cast(object); |
524 if (quote) Print("\""); | 524 if (quote) Print("\""); |
525 for (int i = 0; i < string->length(); i++) { | 525 for (int i = 0; i < string->length(); i++) { |
526 Print("%c", string->Get(i)); | 526 Print("%c", string->Get(i)); |
527 } | 527 } |
528 if (quote) Print("\""); | 528 if (quote) Print("\""); |
529 } else if (object == Heap::null_value()) { | 529 } else if (object->IsNull()) { |
530 Print("null"); | 530 Print("null"); |
531 } else if (object == Heap::true_value()) { | 531 } else if (object->IsTrue()) { |
532 Print("true"); | 532 Print("true"); |
533 } else if (object == Heap::false_value()) { | 533 } else if (object->IsFalse()) { |
534 Print("false"); | 534 Print("false"); |
535 } else if (object == Heap::undefined_value()) { | 535 } else if (object->IsUndefined()) { |
536 Print("undefined"); | 536 Print("undefined"); |
537 } else if (object->IsNumber()) { | 537 } else if (object->IsNumber()) { |
538 Print("%g", object->Number()); | 538 Print("%g", object->Number()); |
539 } else if (object->IsJSObject()) { | 539 } else if (object->IsJSObject()) { |
540 // regular expression | 540 // regular expression |
541 if (object->IsJSFunction()) { | 541 if (object->IsJSFunction()) { |
542 Print("JS-Function"); | 542 Print("JS-Function"); |
543 } else if (object->IsJSArray()) { | 543 } else if (object->IsJSArray()) { |
544 Print("JS-array[%u]", JSArray::cast(object)->length()); | 544 Print("JS-array[%u]", JSArray::cast(object)->length()); |
545 } else if (object->IsJSObject()) { | 545 } else if (object->IsJSObject()) { |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
595 PrintStatements(clause->statements()); | 595 PrintStatements(clause->statements()); |
596 if (clause->statements()->length() > 0) | 596 if (clause->statements()->length() > 0) |
597 Print(" "); | 597 Print(" "); |
598 } | 598 } |
599 | 599 |
600 | 600 |
601 //----------------------------------------------------------------------------- | 601 //----------------------------------------------------------------------------- |
602 | 602 |
603 class IndentedScope BASE_EMBEDDED { | 603 class IndentedScope BASE_EMBEDDED { |
604 public: | 604 public: |
605 IndentedScope() { | 605 explicit IndentedScope(AstPrinter* printer) : ast_printer_(printer) { |
606 ast_printer_->inc_indent(); | 606 ast_printer_->inc_indent(); |
607 } | 607 } |
608 | 608 |
609 explicit IndentedScope(const char* txt, AstNode* node = NULL) { | 609 explicit IndentedScope(const char* txt, AstNode* node = NULL) { |
610 ast_printer_->PrintIndented(txt); | 610 ast_printer_->PrintIndented(txt); |
611 if (node != NULL && node->AsExpression() != NULL) { | 611 if (node != NULL && node->AsExpression() != NULL) { |
612 Expression* expr = node->AsExpression(); | 612 Expression* expr = node->AsExpression(); |
613 bool printed_first = false; | 613 bool printed_first = false; |
614 if ((expr->type() != NULL) && (expr->type()->IsKnown())) { | 614 if ((expr->type() != NULL) && (expr->type()->IsKnown())) { |
615 ast_printer_->Print(" (type = "); | 615 ast_printer_->Print(" (type = "); |
616 ast_printer_->Print(StaticType::Type2String(expr->type())); | 616 ast_printer_->Print(StaticType::Type2String(expr->type())); |
617 printed_first = true; | 617 printed_first = true; |
618 } | 618 } |
619 if (printed_first) ast_printer_->Print(")"); | 619 if (printed_first) ast_printer_->Print(")"); |
620 } | 620 } |
621 ast_printer_->Print("\n"); | 621 ast_printer_->Print("\n"); |
622 ast_printer_->inc_indent(); | 622 ast_printer_->inc_indent(); |
623 } | 623 } |
624 | 624 |
625 virtual ~IndentedScope() { | 625 virtual ~IndentedScope() { |
626 ast_printer_->dec_indent(); | 626 ast_printer_->dec_indent(); |
627 } | 627 } |
628 | 628 |
629 static void SetAstPrinter(AstPrinter* a) { ast_printer_ = a; } | |
630 | |
631 private: | 629 private: |
632 static AstPrinter* ast_printer_; | 630 AstPrinter* ast_printer_; |
633 }; | 631 }; |
634 | 632 |
635 | 633 |
636 AstPrinter* IndentedScope::ast_printer_ = NULL; | |
637 | |
638 | |
639 //----------------------------------------------------------------------------- | 634 //----------------------------------------------------------------------------- |
640 | 635 |
641 int AstPrinter::indent_ = 0; | |
642 | 636 |
643 | 637 AstPrinter::AstPrinter() : indent_(0) { |
644 AstPrinter::AstPrinter() { | |
645 ASSERT(indent_ == 0); | |
646 IndentedScope::SetAstPrinter(this); | |
647 } | 638 } |
648 | 639 |
649 | 640 |
650 AstPrinter::~AstPrinter() { | 641 AstPrinter::~AstPrinter() { |
651 ASSERT(indent_ == 0); | 642 ASSERT(indent_ == 0); |
652 IndentedScope::SetAstPrinter(NULL); | |
653 } | 643 } |
654 | 644 |
655 | 645 |
656 void AstPrinter::PrintIndented(const char* txt) { | 646 void AstPrinter::PrintIndented(const char* txt) { |
657 for (int i = 0; i < indent_; i++) { | 647 for (int i = 0; i < indent_; i++) { |
658 Print(". "); | 648 Print(". "); |
659 } | 649 } |
660 Print(txt); | 650 Print(txt); |
661 } | 651 } |
662 | 652 |
(...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1002 PrettyPrinter::VisitSlot(node); | 992 PrettyPrinter::VisitSlot(node); |
1003 Print("\n"); | 993 Print("\n"); |
1004 } | 994 } |
1005 | 995 |
1006 | 996 |
1007 void AstPrinter::VisitVariableProxy(VariableProxy* node) { | 997 void AstPrinter::VisitVariableProxy(VariableProxy* node) { |
1008 PrintLiteralWithModeIndented("VAR PROXY", node->AsVariable(), node->name(), | 998 PrintLiteralWithModeIndented("VAR PROXY", node->AsVariable(), node->name(), |
1009 node->type()); | 999 node->type()); |
1010 Variable* var = node->var(); | 1000 Variable* var = node->var(); |
1011 if (var != NULL && var->rewrite() != NULL) { | 1001 if (var != NULL && var->rewrite() != NULL) { |
1012 IndentedScope indent; | 1002 IndentedScope indent(this); |
1013 Visit(var->rewrite()); | 1003 Visit(var->rewrite()); |
1014 } | 1004 } |
1015 } | 1005 } |
1016 | 1006 |
1017 | 1007 |
1018 void AstPrinter::VisitAssignment(Assignment* node) { | 1008 void AstPrinter::VisitAssignment(Assignment* node) { |
1019 IndentedScope indent(Token::Name(node->op()), node); | 1009 IndentedScope indent(Token::Name(node->op()), node); |
1020 Visit(node->target()); | 1010 Visit(node->target()); |
1021 Visit(node->value()); | 1011 Visit(node->value()); |
1022 } | 1012 } |
(...skipping 25 matching lines...) Expand all Loading... |
1048 | 1038 |
1049 void AstPrinter::VisitCallNew(CallNew* node) { | 1039 void AstPrinter::VisitCallNew(CallNew* node) { |
1050 IndentedScope indent("CALL NEW"); | 1040 IndentedScope indent("CALL NEW"); |
1051 Visit(node->expression()); | 1041 Visit(node->expression()); |
1052 PrintArguments(node->arguments()); | 1042 PrintArguments(node->arguments()); |
1053 } | 1043 } |
1054 | 1044 |
1055 | 1045 |
1056 void AstPrinter::VisitCallRuntime(CallRuntime* node) { | 1046 void AstPrinter::VisitCallRuntime(CallRuntime* node) { |
1057 PrintLiteralIndented("CALL RUNTIME ", node->name(), false); | 1047 PrintLiteralIndented("CALL RUNTIME ", node->name(), false); |
1058 IndentedScope indent; | 1048 IndentedScope indent(this); |
1059 PrintArguments(node->arguments()); | 1049 PrintArguments(node->arguments()); |
1060 } | 1050 } |
1061 | 1051 |
1062 | 1052 |
1063 void AstPrinter::VisitUnaryOperation(UnaryOperation* node) { | 1053 void AstPrinter::VisitUnaryOperation(UnaryOperation* node) { |
1064 PrintIndentedVisit(Token::Name(node->op()), node->expression()); | 1054 PrintIndentedVisit(Token::Name(node->op()), node->expression()); |
1065 } | 1055 } |
1066 | 1056 |
1067 | 1057 |
1068 void AstPrinter::VisitIncrementOperation(IncrementOperation* node) { | 1058 void AstPrinter::VisitIncrementOperation(IncrementOperation* node) { |
(...skipping 461 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1530 AddAttribute("mode", Variable::Mode2String(decl->mode())); | 1520 AddAttribute("mode", Variable::Mode2String(decl->mode())); |
1531 } | 1521 } |
1532 Visit(decl->proxy()); | 1522 Visit(decl->proxy()); |
1533 if (decl->fun() != NULL) Visit(decl->fun()); | 1523 if (decl->fun() != NULL) Visit(decl->fun()); |
1534 } | 1524 } |
1535 | 1525 |
1536 | 1526 |
1537 #endif // DEBUG | 1527 #endif // DEBUG |
1538 | 1528 |
1539 } } // namespace v8::internal | 1529 } } // namespace v8::internal |
OLD | NEW |