| 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/prettyprinter.h" | 5 #include "src/prettyprinter.h" |
| 6 | 6 |
| 7 #include <stdarg.h> | 7 #include <stdarg.h> |
| 8 | 8 |
| 9 #include "src/ast-value-factory.h" | 9 #include "src/ast-value-factory.h" |
| 10 #include "src/base/platform/platform.h" | 10 #include "src/base/platform/platform.h" |
| 11 #include "src/scopes.h" | 11 #include "src/scopes.h" |
| 12 | 12 |
| 13 namespace v8 { | 13 namespace v8 { |
| 14 namespace internal { | 14 namespace internal { |
| 15 | 15 |
| 16 CallPrinter::CallPrinter(Isolate* isolate, Zone* zone) { | 16 CallPrinter::CallPrinter(Isolate* isolate) { |
| 17 output_ = NULL; | 17 output_ = NULL; |
| 18 size_ = 0; | 18 size_ = 0; |
| 19 pos_ = 0; | 19 pos_ = 0; |
| 20 position_ = 0; | 20 position_ = 0; |
| 21 found_ = false; | 21 found_ = false; |
| 22 done_ = false; | 22 done_ = false; |
| 23 InitializeAstVisitor(isolate, zone); | 23 InitializeAstVisitor(isolate); |
| 24 } | 24 } |
| 25 | 25 |
| 26 | 26 |
| 27 CallPrinter::~CallPrinter() { DeleteArray(output_); } | 27 CallPrinter::~CallPrinter() { DeleteArray(output_); } |
| 28 | 28 |
| 29 | 29 |
| 30 const char* CallPrinter::Print(FunctionLiteral* program, int position) { | 30 const char* CallPrinter::Print(FunctionLiteral* program, int position) { |
| 31 Init(); | 31 Init(); |
| 32 position_ = position; | 32 position_ = position; |
| 33 Find(program); | 33 Find(program); |
| (...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 433 static int FormatSlotNode(Vector<char>* buf, Expression* node, | 433 static int FormatSlotNode(Vector<char>* buf, Expression* node, |
| 434 const char* node_name, FeedbackVectorSlot slot) { | 434 const char* node_name, FeedbackVectorSlot slot) { |
| 435 int pos = SNPrintF(*buf, "%s", node_name); | 435 int pos = SNPrintF(*buf, "%s", node_name); |
| 436 if (!slot.IsInvalid()) { | 436 if (!slot.IsInvalid()) { |
| 437 pos = SNPrintF(*buf + pos, " Slot(%d)", slot.ToInt()); | 437 pos = SNPrintF(*buf + pos, " Slot(%d)", slot.ToInt()); |
| 438 } | 438 } |
| 439 return pos; | 439 return pos; |
| 440 } | 440 } |
| 441 | 441 |
| 442 | 442 |
| 443 PrettyPrinter::PrettyPrinter(Isolate* isolate, Zone* zone) { | 443 PrettyPrinter::PrettyPrinter(Isolate* isolate) { |
| 444 output_ = NULL; | 444 output_ = NULL; |
| 445 size_ = 0; | 445 size_ = 0; |
| 446 pos_ = 0; | 446 pos_ = 0; |
| 447 InitializeAstVisitor(isolate, zone); | 447 InitializeAstVisitor(isolate); |
| 448 } | 448 } |
| 449 | 449 |
| 450 | 450 |
| 451 PrettyPrinter::~PrettyPrinter() { | 451 PrettyPrinter::~PrettyPrinter() { |
| 452 DeleteArray(output_); | 452 DeleteArray(output_); |
| 453 } | 453 } |
| 454 | 454 |
| 455 | 455 |
| 456 void PrettyPrinter::VisitBlock(Block* node) { | 456 void PrettyPrinter::VisitBlock(Block* node) { |
| 457 if (!node->ignore_completion_value()) Print("{ "); | 457 if (!node->ignore_completion_value()) Print("{ "); |
| (...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 897 | 897 |
| 898 | 898 |
| 899 const char* PrettyPrinter::PrintProgram(FunctionLiteral* program) { | 899 const char* PrettyPrinter::PrintProgram(FunctionLiteral* program) { |
| 900 Init(); | 900 Init(); |
| 901 PrintStatements(program->body()); | 901 PrintStatements(program->body()); |
| 902 Print("\n"); | 902 Print("\n"); |
| 903 return output_; | 903 return output_; |
| 904 } | 904 } |
| 905 | 905 |
| 906 | 906 |
| 907 void PrettyPrinter::PrintOut(Isolate* isolate, Zone* zone, AstNode* node) { | 907 void PrettyPrinter::PrintOut(Isolate* isolate, AstNode* node) { |
| 908 PrettyPrinter printer(isolate, zone); | 908 PrettyPrinter printer(isolate); |
| 909 PrintF("%s\n", printer.Print(node)); | 909 PrintF("%s\n", printer.Print(node)); |
| 910 } | 910 } |
| 911 | 911 |
| 912 | 912 |
| 913 void PrettyPrinter::Init() { | 913 void PrettyPrinter::Init() { |
| 914 if (size_ == 0) { | 914 if (size_ == 0) { |
| 915 DCHECK(output_ == NULL); | 915 DCHECK(output_ == NULL); |
| 916 const int initial_size = 256; | 916 const int initial_size = 256; |
| 917 output_ = NewArray<char>(initial_size); | 917 output_ = NewArray<char>(initial_size); |
| 918 size_ = initial_size; | 918 size_ = initial_size; |
| (...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1073 } | 1073 } |
| 1074 | 1074 |
| 1075 private: | 1075 private: |
| 1076 AstPrinter* ast_printer_; | 1076 AstPrinter* ast_printer_; |
| 1077 }; | 1077 }; |
| 1078 | 1078 |
| 1079 | 1079 |
| 1080 //----------------------------------------------------------------------------- | 1080 //----------------------------------------------------------------------------- |
| 1081 | 1081 |
| 1082 | 1082 |
| 1083 AstPrinter::AstPrinter(Isolate* isolate, Zone* zone) | 1083 AstPrinter::AstPrinter(Isolate* isolate) : PrettyPrinter(isolate), indent_(0) {} |
| 1084 : PrettyPrinter(isolate, zone), indent_(0) {} | |
| 1085 | 1084 |
| 1086 | 1085 |
| 1087 AstPrinter::~AstPrinter() { | 1086 AstPrinter::~AstPrinter() { |
| 1088 DCHECK(indent_ == 0); | 1087 DCHECK(indent_ == 0); |
| 1089 } | 1088 } |
| 1090 | 1089 |
| 1091 | 1090 |
| 1092 void AstPrinter::PrintIndented(const char* txt) { | 1091 void AstPrinter::PrintIndented(const char* txt) { |
| 1093 for (int i = 0; i < indent_; i++) { | 1092 for (int i = 0; i < indent_; i++) { |
| 1094 Print(". "); | 1093 Print(". "); |
| (...skipping 519 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1614 | 1613 |
| 1615 void AstPrinter::VisitSuperCallReference(SuperCallReference* node) { | 1614 void AstPrinter::VisitSuperCallReference(SuperCallReference* node) { |
| 1616 IndentedScope indent(this, "SUPER-CALL-REFERENCE", node->position()); | 1615 IndentedScope indent(this, "SUPER-CALL-REFERENCE", node->position()); |
| 1617 } | 1616 } |
| 1618 | 1617 |
| 1619 | 1618 |
| 1620 #endif // DEBUG | 1619 #endif // DEBUG |
| 1621 | 1620 |
| 1622 } // namespace internal | 1621 } // namespace internal |
| 1623 } // namespace v8 | 1622 } // namespace v8 |
| OLD | NEW |