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 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
92 FindStatements(node->statements()); | 92 FindStatements(node->statements()); |
93 } | 93 } |
94 | 94 |
95 | 95 |
96 void CallPrinter::VisitVariableDeclaration(VariableDeclaration* node) {} | 96 void CallPrinter::VisitVariableDeclaration(VariableDeclaration* node) {} |
97 | 97 |
98 | 98 |
99 void CallPrinter::VisitFunctionDeclaration(FunctionDeclaration* node) {} | 99 void CallPrinter::VisitFunctionDeclaration(FunctionDeclaration* node) {} |
100 | 100 |
101 | 101 |
102 void CallPrinter::VisitImportDeclaration(ImportDeclaration* node) { | 102 void CallPrinter::VisitImportDeclaration(ImportDeclaration* node) {} |
103 } | |
104 | 103 |
105 | 104 |
106 void CallPrinter::VisitExportDeclaration(ExportDeclaration* node) {} | 105 void CallPrinter::VisitExportDeclaration(ExportDeclaration* node) {} |
107 | 106 |
108 | 107 |
109 void CallPrinter::VisitExpressionStatement(ExpressionStatement* node) { | 108 void CallPrinter::VisitExpressionStatement(ExpressionStatement* node) { |
110 Find(node->expression()); | 109 Find(node->expression()); |
111 } | 110 } |
112 | 111 |
113 | 112 |
(...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
458 | 457 |
459 | 458 |
460 PrettyPrinter::PrettyPrinter(Isolate* isolate) { | 459 PrettyPrinter::PrettyPrinter(Isolate* isolate) { |
461 output_ = NULL; | 460 output_ = NULL; |
462 size_ = 0; | 461 size_ = 0; |
463 pos_ = 0; | 462 pos_ = 0; |
464 InitializeAstVisitor(isolate); | 463 InitializeAstVisitor(isolate); |
465 } | 464 } |
466 | 465 |
467 | 466 |
468 PrettyPrinter::~PrettyPrinter() { | 467 PrettyPrinter::~PrettyPrinter() { DeleteArray(output_); } |
469 DeleteArray(output_); | |
470 } | |
471 | 468 |
472 | 469 |
473 void PrettyPrinter::VisitBlock(Block* node) { | 470 void PrettyPrinter::VisitBlock(Block* node) { |
474 if (!node->ignore_completion_value()) Print("{ "); | 471 if (!node->ignore_completion_value()) Print("{ "); |
475 PrintStatements(node->statements()); | 472 PrintStatements(node->statements()); |
476 if (node->statements()->length() > 0) Print(" "); | 473 if (node->statements()->length() > 0) Print(" "); |
477 if (!node->ignore_completion_value()) Print("}"); | 474 if (!node->ignore_completion_value()) Print("}"); |
478 } | 475 } |
479 | 476 |
480 | 477 |
(...skipping 28 matching lines...) Expand all Loading... |
509 Print(";"); | 506 Print(";"); |
510 } | 507 } |
511 | 508 |
512 | 509 |
513 void PrettyPrinter::VisitExpressionStatement(ExpressionStatement* node) { | 510 void PrettyPrinter::VisitExpressionStatement(ExpressionStatement* node) { |
514 Visit(node->expression()); | 511 Visit(node->expression()); |
515 Print(";"); | 512 Print(";"); |
516 } | 513 } |
517 | 514 |
518 | 515 |
519 void PrettyPrinter::VisitEmptyStatement(EmptyStatement* node) { | 516 void PrettyPrinter::VisitEmptyStatement(EmptyStatement* node) { Print(";"); } |
520 Print(";"); | |
521 } | |
522 | 517 |
523 | 518 |
524 void PrettyPrinter::VisitSloppyBlockFunctionStatement( | 519 void PrettyPrinter::VisitSloppyBlockFunctionStatement( |
525 SloppyBlockFunctionStatement* node) { | 520 SloppyBlockFunctionStatement* node) { |
526 Visit(node->statement()); | 521 Visit(node->statement()); |
527 } | 522 } |
528 | 523 |
529 | 524 |
530 void PrettyPrinter::VisitIfStatement(IfStatement* node) { | 525 void PrettyPrinter::VisitIfStatement(IfStatement* node) { |
531 Print("if ("); | 526 Print("if ("); |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
577 Visit(node->statement()); | 572 Visit(node->statement()); |
578 } | 573 } |
579 | 574 |
580 | 575 |
581 void PrettyPrinter::VisitSwitchStatement(SwitchStatement* node) { | 576 void PrettyPrinter::VisitSwitchStatement(SwitchStatement* node) { |
582 PrintLabels(node->labels()); | 577 PrintLabels(node->labels()); |
583 Print("switch ("); | 578 Print("switch ("); |
584 Visit(node->tag()); | 579 Visit(node->tag()); |
585 Print(") { "); | 580 Print(") { "); |
586 ZoneList<CaseClause*>* cases = node->cases(); | 581 ZoneList<CaseClause*>* cases = node->cases(); |
587 for (int i = 0; i < cases->length(); i++) | 582 for (int i = 0; i < cases->length(); i++) Visit(cases->at(i)); |
588 Visit(cases->at(i)); | |
589 Print("}"); | 583 Print("}"); |
590 } | 584 } |
591 | 585 |
592 | 586 |
593 void PrettyPrinter::VisitCaseClause(CaseClause* clause) { | 587 void PrettyPrinter::VisitCaseClause(CaseClause* clause) { |
594 if (clause->is_default()) { | 588 if (clause->is_default()) { |
595 Print("default"); | 589 Print("default"); |
596 } else { | 590 } else { |
597 Print("case "); | 591 Print("case "); |
598 Visit(clause->label()); | 592 Visit(clause->label()); |
599 } | 593 } |
600 Print(": "); | 594 Print(": "); |
601 PrintStatements(clause->statements()); | 595 PrintStatements(clause->statements()); |
602 if (clause->statements()->length() > 0) | 596 if (clause->statements()->length() > 0) Print(" "); |
603 Print(" "); | |
604 } | 597 } |
605 | 598 |
606 | 599 |
607 void PrettyPrinter::VisitDoWhileStatement(DoWhileStatement* node) { | 600 void PrettyPrinter::VisitDoWhileStatement(DoWhileStatement* node) { |
608 PrintLabels(node->labels()); | 601 PrintLabels(node->labels()); |
609 Print("do "); | 602 Print("do "); |
610 Visit(node->body()); | 603 Visit(node->body()); |
611 Print(" while ("); | 604 Print(" while ("); |
612 Visit(node->cond()); | 605 Visit(node->cond()); |
613 Print(");"); | 606 Print(");"); |
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
911 const char* PrettyPrinter::Print(AstNode* node) { | 904 const char* PrettyPrinter::Print(AstNode* node) { |
912 Init(); | 905 Init(); |
913 Visit(node); | 906 Visit(node); |
914 return output_; | 907 return output_; |
915 } | 908 } |
916 | 909 |
917 | 910 |
918 const char* PrettyPrinter::PrintExpression(FunctionLiteral* program) { | 911 const char* PrettyPrinter::PrintExpression(FunctionLiteral* program) { |
919 Init(); | 912 Init(); |
920 ExpressionStatement* statement = | 913 ExpressionStatement* statement = |
921 program->body()->at(0)->AsExpressionStatement(); | 914 program->body()->at(0)->AsExpressionStatement(); |
922 Visit(statement->expression()); | 915 Visit(statement->expression()); |
923 return output_; | 916 return output_; |
924 } | 917 } |
925 | 918 |
926 | 919 |
927 const char* PrettyPrinter::PrintProgram(FunctionLiteral* program) { | 920 const char* PrettyPrinter::PrintProgram(FunctionLiteral* program) { |
928 Init(); | 921 Init(); |
929 PrintStatements(program->body()); | 922 PrintStatements(program->body()); |
930 Print("\n"); | 923 Print("\n"); |
931 return output_; | 924 return output_; |
(...skipping 15 matching lines...) Expand all Loading... |
947 } | 940 } |
948 output_[0] = '\0'; | 941 output_[0] = '\0'; |
949 pos_ = 0; | 942 pos_ = 0; |
950 } | 943 } |
951 | 944 |
952 | 945 |
953 void PrettyPrinter::Print(const char* format, ...) { | 946 void PrettyPrinter::Print(const char* format, ...) { |
954 for (;;) { | 947 for (;;) { |
955 va_list arguments; | 948 va_list arguments; |
956 va_start(arguments, format); | 949 va_start(arguments, format); |
957 int n = VSNPrintF(Vector<char>(output_, size_) + pos_, | 950 int n = VSNPrintF(Vector<char>(output_, size_) + pos_, format, arguments); |
958 format, | |
959 arguments); | |
960 va_end(arguments); | 951 va_end(arguments); |
961 | 952 |
962 if (n >= 0) { | 953 if (n >= 0) { |
963 // there was enough space - we are done | 954 // there was enough space - we are done |
964 pos_ += n; | 955 pos_ += n; |
965 return; | 956 return; |
966 } else { | 957 } else { |
967 // there was not enough space - allocate more and try again | 958 // there was not enough space - allocate more and try again |
968 const int slack = 32; | 959 const int slack = 32; |
969 int new_size = size_ + (size_ >> 1) + slack; | 960 int new_size = size_ + (size_ >> 1) + slack; |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1045 | 1036 |
1046 | 1037 |
1047 void PrettyPrinter::PrintLiteral(const AstRawString* value, bool quote) { | 1038 void PrettyPrinter::PrintLiteral(const AstRawString* value, bool quote) { |
1048 PrintLiteral(value->string(), quote); | 1039 PrintLiteral(value->string(), quote); |
1049 } | 1040 } |
1050 | 1041 |
1051 | 1042 |
1052 void PrettyPrinter::PrintParameters(Scope* scope) { | 1043 void PrettyPrinter::PrintParameters(Scope* scope) { |
1053 Print("("); | 1044 Print("("); |
1054 for (int i = 0; i < scope->num_parameters(); i++) { | 1045 for (int i = 0; i < scope->num_parameters(); i++) { |
1055 if (i > 0) Print(", "); | 1046 if (i > 0) Print(", "); |
1056 PrintLiteral(scope->parameter(i)->name(), false); | 1047 PrintLiteral(scope->parameter(i)->name(), false); |
1057 } | 1048 } |
1058 Print(")"); | 1049 Print(")"); |
1059 } | 1050 } |
1060 | 1051 |
1061 | 1052 |
1062 void PrettyPrinter::PrintDeclarations(ZoneList<Declaration*>* declarations) { | 1053 void PrettyPrinter::PrintDeclarations(ZoneList<Declaration*>* declarations) { |
1063 for (int i = 0; i < declarations->length(); i++) { | 1054 for (int i = 0; i < declarations->length(); i++) { |
1064 if (i > 0) Print(" "); | 1055 if (i > 0) Print(" "); |
1065 Visit(declarations->at(i)); | 1056 Visit(declarations->at(i)); |
1066 } | 1057 } |
1067 } | 1058 } |
1068 | 1059 |
1069 | 1060 |
1070 void PrettyPrinter::PrintFunctionLiteral(FunctionLiteral* function) { | 1061 void PrettyPrinter::PrintFunctionLiteral(FunctionLiteral* function) { |
1071 Print("function "); | 1062 Print("function "); |
1072 PrintLiteral(function->name(), false); | 1063 PrintLiteral(function->name(), false); |
1073 PrintParameters(function->scope()); | 1064 PrintParameters(function->scope()); |
1074 Print(" { "); | 1065 Print(" { "); |
1075 PrintDeclarations(function->scope()->declarations()); | 1066 PrintDeclarations(function->scope()->declarations()); |
1076 PrintStatements(function->body()); | 1067 PrintStatements(function->body()); |
1077 Print(" }"); | 1068 Print(" }"); |
1078 } | 1069 } |
1079 | 1070 |
1080 | 1071 |
1081 //----------------------------------------------------------------------------- | 1072 //----------------------------------------------------------------------------- |
1082 | 1073 |
1083 class IndentedScope BASE_EMBEDDED { | 1074 class IndentedScope BASE_EMBEDDED { |
1084 public: | 1075 public: |
1085 IndentedScope(AstPrinter* printer, const char* txt) | 1076 IndentedScope(AstPrinter* printer, const char* txt) : ast_printer_(printer) { |
1086 : ast_printer_(printer) { | |
1087 ast_printer_->PrintIndented(txt); | 1077 ast_printer_->PrintIndented(txt); |
1088 ast_printer_->Print("\n"); | 1078 ast_printer_->Print("\n"); |
1089 ast_printer_->inc_indent(); | 1079 ast_printer_->inc_indent(); |
1090 } | 1080 } |
1091 | 1081 |
1092 IndentedScope(AstPrinter* printer, const char* txt, int pos) | 1082 IndentedScope(AstPrinter* printer, const char* txt, int pos) |
1093 : ast_printer_(printer) { | 1083 : ast_printer_(printer) { |
1094 ast_printer_->PrintIndented(txt); | 1084 ast_printer_->PrintIndented(txt); |
1095 ast_printer_->Print(" at %d\n", pos); | 1085 ast_printer_->Print(" at %d\n", pos); |
1096 ast_printer_->inc_indent(); | 1086 ast_printer_->inc_indent(); |
1097 } | 1087 } |
1098 | 1088 |
1099 virtual ~IndentedScope() { | 1089 virtual ~IndentedScope() { ast_printer_->dec_indent(); } |
1100 ast_printer_->dec_indent(); | |
1101 } | |
1102 | 1090 |
1103 private: | 1091 private: |
1104 AstPrinter* ast_printer_; | 1092 AstPrinter* ast_printer_; |
1105 }; | 1093 }; |
1106 | 1094 |
1107 | 1095 |
1108 //----------------------------------------------------------------------------- | 1096 //----------------------------------------------------------------------------- |
1109 | 1097 |
1110 | 1098 |
1111 AstPrinter::AstPrinter(Isolate* isolate) : PrettyPrinter(isolate), indent_(0) {} | 1099 AstPrinter::AstPrinter(Isolate* isolate) : PrettyPrinter(isolate), indent_(0) {} |
1112 | 1100 |
1113 | 1101 |
1114 AstPrinter::~AstPrinter() { | 1102 AstPrinter::~AstPrinter() { DCHECK(indent_ == 0); } |
1115 DCHECK(indent_ == 0); | |
1116 } | |
1117 | 1103 |
1118 | 1104 |
1119 void AstPrinter::PrintIndented(const char* txt) { | 1105 void AstPrinter::PrintIndented(const char* txt) { |
1120 for (int i = 0; i < indent_; i++) { | 1106 for (int i = 0; i < indent_; i++) { |
1121 Print(". "); | 1107 Print(". "); |
1122 } | 1108 } |
1123 Print(txt); | 1109 Print(txt); |
1124 } | 1110 } |
1125 | 1111 |
1126 | 1112 |
1127 void AstPrinter::PrintLiteralIndented(const char* info, | 1113 void AstPrinter::PrintLiteralIndented(const char* info, Handle<Object> value, |
1128 Handle<Object> value, | |
1129 bool quote) { | 1114 bool quote) { |
1130 PrintIndented(info); | 1115 PrintIndented(info); |
1131 Print(" "); | 1116 Print(" "); |
1132 PrintLiteral(value, quote); | 1117 PrintLiteral(value, quote); |
1133 Print("\n"); | 1118 Print("\n"); |
1134 } | 1119 } |
1135 | 1120 |
1136 | 1121 |
1137 void AstPrinter::PrintLiteralWithModeIndented(const char* info, | 1122 void AstPrinter::PrintLiteralWithModeIndented(const char* info, Variable* var, |
1138 Variable* var, | |
1139 Handle<Object> value) { | 1123 Handle<Object> value) { |
1140 if (var == NULL) { | 1124 if (var == NULL) { |
1141 PrintLiteralIndented(info, value, true); | 1125 PrintLiteralIndented(info, value, true); |
1142 } else { | 1126 } else { |
1143 EmbeddedVector<char, 256> buf; | 1127 EmbeddedVector<char, 256> buf; |
1144 int pos = SNPrintF(buf, "%s (mode = %s", info, | 1128 int pos = SNPrintF(buf, "%s (mode = %s", info, |
1145 Variable::Mode2String(var->mode())); | 1129 Variable::Mode2String(var->mode())); |
1146 SNPrintF(buf + pos, ")"); | 1130 SNPrintF(buf + pos, ")"); |
1147 PrintLiteralIndented(buf.start(), value, true); | 1131 PrintLiteralIndented(buf.start(), value, true); |
1148 } | 1132 } |
1149 } | 1133 } |
1150 | 1134 |
1151 | 1135 |
1152 void AstPrinter::PrintLabelsIndented(ZoneList<const AstRawString*>* labels) { | 1136 void AstPrinter::PrintLabelsIndented(ZoneList<const AstRawString*>* labels) { |
1153 if (labels == NULL || labels->length() == 0) return; | 1137 if (labels == NULL || labels->length() == 0) return; |
1154 PrintIndented("LABELS "); | 1138 PrintIndented("LABELS "); |
1155 PrintLabels(labels); | 1139 PrintLabels(labels); |
1156 Print("\n"); | 1140 Print("\n"); |
1157 } | 1141 } |
1158 | 1142 |
1159 | 1143 |
1160 void AstPrinter::PrintIndentedVisit(const char* s, AstNode* node) { | 1144 void AstPrinter::PrintIndentedVisit(const char* s, AstNode* node) { |
1161 IndentedScope indent(this, s, node->position()); | 1145 IndentedScope indent(this, s, node->position()); |
1162 Visit(node); | 1146 Visit(node); |
1163 } | 1147 } |
1164 | 1148 |
1165 | 1149 |
1166 const char* AstPrinter::PrintProgram(FunctionLiteral* program) { | 1150 const char* AstPrinter::PrintProgram(FunctionLiteral* program) { |
1167 Init(); | 1151 Init(); |
1168 { IndentedScope indent(this, "FUNC", program->position()); | 1152 { |
| 1153 IndentedScope indent(this, "FUNC", program->position()); |
1169 PrintLiteralIndented("NAME", program->name(), true); | 1154 PrintLiteralIndented("NAME", program->name(), true); |
1170 PrintLiteralIndented("INFERRED NAME", program->inferred_name(), true); | 1155 PrintLiteralIndented("INFERRED NAME", program->inferred_name(), true); |
1171 PrintParameters(program->scope()); | 1156 PrintParameters(program->scope()); |
1172 PrintDeclarations(program->scope()->declarations()); | 1157 PrintDeclarations(program->scope()->declarations()); |
1173 PrintStatements(program->body()); | 1158 PrintStatements(program->body()); |
1174 } | 1159 } |
1175 return Output(); | 1160 return Output(); |
1176 } | 1161 } |
1177 | 1162 |
1178 | 1163 |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1215 const char* block_txt = | 1200 const char* block_txt = |
1216 node->ignore_completion_value() ? "BLOCK NOCOMPLETIONS" : "BLOCK"; | 1201 node->ignore_completion_value() ? "BLOCK NOCOMPLETIONS" : "BLOCK"; |
1217 IndentedScope indent(this, block_txt, node->position()); | 1202 IndentedScope indent(this, block_txt, node->position()); |
1218 PrintStatements(node->statements()); | 1203 PrintStatements(node->statements()); |
1219 } | 1204 } |
1220 | 1205 |
1221 | 1206 |
1222 // TODO(svenpanne) Start with IndentedScope. | 1207 // TODO(svenpanne) Start with IndentedScope. |
1223 void AstPrinter::VisitVariableDeclaration(VariableDeclaration* node) { | 1208 void AstPrinter::VisitVariableDeclaration(VariableDeclaration* node) { |
1224 PrintLiteralWithModeIndented(Variable::Mode2String(node->mode()), | 1209 PrintLiteralWithModeIndented(Variable::Mode2String(node->mode()), |
1225 node->proxy()->var(), | 1210 node->proxy()->var(), node->proxy()->name()); |
1226 node->proxy()->name()); | |
1227 } | 1211 } |
1228 | 1212 |
1229 | 1213 |
1230 // TODO(svenpanne) Start with IndentedScope. | 1214 // TODO(svenpanne) Start with IndentedScope. |
1231 void AstPrinter::VisitFunctionDeclaration(FunctionDeclaration* node) { | 1215 void AstPrinter::VisitFunctionDeclaration(FunctionDeclaration* node) { |
1232 PrintIndented("FUNCTION "); | 1216 PrintIndented("FUNCTION "); |
1233 PrintLiteral(node->proxy()->name(), true); | 1217 PrintLiteral(node->proxy()->name(), true); |
1234 Print(" = function "); | 1218 Print(" = function "); |
1235 PrintLiteral(node->fun()->name(), false); | 1219 PrintLiteral(node->fun()->name(), false); |
1236 Print("\n"); | 1220 Print("\n"); |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1362 IndentedScope indent(this, "FOR OF", node->position()); | 1346 IndentedScope indent(this, "FOR OF", node->position()); |
1363 PrintIndentedVisit("FOR", node->each()); | 1347 PrintIndentedVisit("FOR", node->each()); |
1364 PrintIndentedVisit("OF", node->iterable()); | 1348 PrintIndentedVisit("OF", node->iterable()); |
1365 PrintIndentedVisit("BODY", node->body()); | 1349 PrintIndentedVisit("BODY", node->body()); |
1366 } | 1350 } |
1367 | 1351 |
1368 | 1352 |
1369 void AstPrinter::VisitTryCatchStatement(TryCatchStatement* node) { | 1353 void AstPrinter::VisitTryCatchStatement(TryCatchStatement* node) { |
1370 IndentedScope indent(this, "TRY CATCH", node->position()); | 1354 IndentedScope indent(this, "TRY CATCH", node->position()); |
1371 PrintIndentedVisit("TRY", node->try_block()); | 1355 PrintIndentedVisit("TRY", node->try_block()); |
1372 PrintLiteralWithModeIndented("CATCHVAR", | 1356 PrintLiteralWithModeIndented("CATCHVAR", node->variable(), |
1373 node->variable(), | |
1374 node->variable()->name()); | 1357 node->variable()->name()); |
1375 PrintIndentedVisit("CATCH", node->catch_block()); | 1358 PrintIndentedVisit("CATCH", node->catch_block()); |
1376 } | 1359 } |
1377 | 1360 |
1378 | 1361 |
1379 void AstPrinter::VisitTryFinallyStatement(TryFinallyStatement* node) { | 1362 void AstPrinter::VisitTryFinallyStatement(TryFinallyStatement* node) { |
1380 IndentedScope indent(this, "TRY FINALLY", node->position()); | 1363 IndentedScope indent(this, "TRY FINALLY", node->position()); |
1381 PrintIndentedVisit("TRY", node->try_block()); | 1364 PrintIndentedVisit("TRY", node->try_block()); |
1382 PrintIndentedVisit("FINALLY", node->finally_block()); | 1365 PrintIndentedVisit("FINALLY", node->finally_block()); |
1383 } | 1366 } |
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1656 | 1639 |
1657 void AstPrinter::VisitSuperCallReference(SuperCallReference* node) { | 1640 void AstPrinter::VisitSuperCallReference(SuperCallReference* node) { |
1658 IndentedScope indent(this, "SUPER-CALL-REFERENCE", node->position()); | 1641 IndentedScope indent(this, "SUPER-CALL-REFERENCE", node->position()); |
1659 } | 1642 } |
1660 | 1643 |
1661 | 1644 |
1662 #endif // DEBUG | 1645 #endif // DEBUG |
1663 | 1646 |
1664 } // namespace internal | 1647 } // namespace internal |
1665 } // namespace v8 | 1648 } // namespace v8 |
OLD | NEW |