Index: src/ast/prettyprinter.cc |
diff --git a/src/ast/prettyprinter.cc b/src/ast/prettyprinter.cc |
index 3f624be864878428e16e6d30314e2091848b7bd0..9cc841601d9f9fed9824dc3d4d983e84b2bb8533 100644 |
--- a/src/ast/prettyprinter.cc |
+++ b/src/ast/prettyprinter.cc |
@@ -1203,6 +1203,14 @@ const char* AstPrinter::PrintProgram(FunctionLiteral* program) { |
} |
+void AstPrinter::PrintOut(Isolate* isolate, AstNode* node) { |
+ AstPrinter printer(isolate); |
+ printer.Init(); |
+ printer.Visit(node); |
+ PrintF("%s", printer.Output()); |
+} |
+ |
+ |
void AstPrinter::PrintDeclarations(ZoneList<Declaration*>* declarations) { |
if (declarations->length() > 0) { |
IndentedScope indent(this, "DECLS"); |
@@ -1390,6 +1398,10 @@ void AstPrinter::VisitForOfStatement(ForOfStatement* node) { |
PrintIndentedVisit("FOR", node->each()); |
PrintIndentedVisit("OF", node->iterable()); |
PrintIndentedVisit("BODY", node->body()); |
+ PrintIndentedVisit("INIT", node->assign_iterator()); |
+ PrintIndentedVisit("NEXT", node->next_result()); |
+ PrintIndentedVisit("EACH", node->assign_each()); |
+ PrintIndentedVisit("DONE", node->result_done()); |
} |
@@ -1542,31 +1554,36 @@ void AstPrinter::VisitArrayLiteral(ArrayLiteral* node) { |
void AstPrinter::VisitVariableProxy(VariableProxy* node) { |
- Variable* var = node->var(); |
EmbeddedVector<char, 128> buf; |
int pos = |
FormatSlotNode(&buf, node, "VAR PROXY", node->VariableFeedbackSlot()); |
- switch (var->location()) { |
- case VariableLocation::UNALLOCATED: |
- break; |
- case VariableLocation::PARAMETER: |
- SNPrintF(buf + pos, " parameter[%d]", var->index()); |
- break; |
- case VariableLocation::LOCAL: |
- SNPrintF(buf + pos, " local[%d]", var->index()); |
- break; |
- case VariableLocation::CONTEXT: |
- SNPrintF(buf + pos, " context[%d]", var->index()); |
- break; |
- case VariableLocation::GLOBAL: |
- SNPrintF(buf + pos, " global[%d]", var->index()); |
- break; |
- case VariableLocation::LOOKUP: |
- SNPrintF(buf + pos, " lookup"); |
- break; |
+ if (!node->is_resolved()) { |
+ SNPrintF(buf + pos, " unresolved"); |
+ PrintLiteralWithModeIndented(buf.start(), nullptr, node->name()); |
+ } else { |
+ Variable* var = node->var(); |
+ switch (var->location()) { |
+ case VariableLocation::UNALLOCATED: |
+ break; |
+ case VariableLocation::PARAMETER: |
+ SNPrintF(buf + pos, " parameter[%d]", var->index()); |
+ break; |
+ case VariableLocation::LOCAL: |
+ SNPrintF(buf + pos, " local[%d]", var->index()); |
+ break; |
+ case VariableLocation::CONTEXT: |
+ SNPrintF(buf + pos, " context[%d]", var->index()); |
+ break; |
+ case VariableLocation::GLOBAL: |
+ SNPrintF(buf + pos, " global[%d]", var->index()); |
+ break; |
+ case VariableLocation::LOOKUP: |
+ SNPrintF(buf + pos, " lookup"); |
+ break; |
+ } |
+ PrintLiteralWithModeIndented(buf.start(), var, node->name()); |
} |
- PrintLiteralWithModeIndented(buf.start(), var, node->name()); |
} |