Index: src/prettyprinter.cc |
=================================================================== |
--- src/prettyprinter.cc (revision 3736) |
+++ src/prettyprinter.cc (working copy) |
@@ -594,12 +594,22 @@ |
ast_printer_->inc_indent(); |
} |
- explicit IndentedScope(const char* txt, StaticType* type = NULL) { |
+ explicit IndentedScope(const char* txt, AstNode* node = NULL) { |
ast_printer_->PrintIndented(txt); |
- if ((type != NULL) && (type->IsKnown())) { |
- ast_printer_->Print(" (type = "); |
- ast_printer_->Print(StaticType::Type2String(type)); |
- ast_printer_->Print(")"); |
+ if (node != NULL && node->AsExpression() != NULL) { |
+ Expression* expr = node->AsExpression(); |
+ bool printed_first = false; |
+ if ((expr->type() != NULL) && (expr->type()->IsKnown())) { |
+ ast_printer_->Print(" (type = "); |
+ ast_printer_->Print(StaticType::Type2String(expr->type())); |
+ printed_first = true; |
+ } |
+ if (expr->num() != Expression::kNoLabel) { |
+ ast_printer_->Print(printed_first ? ", num = " : " (num = "); |
+ ast_printer_->Print("%d", expr->num()); |
+ printed_first = true; |
+ } |
+ if (printed_first) ast_printer_->Print(")"); |
} |
ast_printer_->Print("\n"); |
ast_printer_->inc_indent(); |
@@ -657,19 +667,22 @@ |
void AstPrinter::PrintLiteralWithModeIndented(const char* info, |
Variable* var, |
Handle<Object> value, |
- StaticType* type) { |
+ StaticType* type, |
+ int num) { |
if (var == NULL) { |
PrintLiteralIndented(info, value, true); |
} else { |
EmbeddedVector<char, 256> buf; |
+ int pos = OS::SNPrintF(buf, "%s (mode = %s", info, |
+ Variable::Mode2String(var->mode())); |
if (type->IsKnown()) { |
- OS::SNPrintF(buf, "%s (mode = %s, type = %s)", info, |
- Variable::Mode2String(var->mode()), |
- StaticType::Type2String(type)); |
- } else { |
- OS::SNPrintF(buf, "%s (mode = %s)", info, |
- Variable::Mode2String(var->mode())); |
+ pos += OS::SNPrintF(buf + pos, ", type = %s", |
+ StaticType::Type2String(type)); |
} |
+ if (num != Expression::kNoLabel) { |
+ pos += OS::SNPrintF(buf + pos, ", num = %d", num); |
+ } |
+ OS::SNPrintF(buf + pos, ")"); |
PrintLiteralIndented(buf.start(), value, true); |
} |
} |
@@ -692,7 +705,7 @@ |
void AstPrinter::PrintIndentedVisit(const char* s, AstNode* node) { |
- IndentedScope indent(s); |
+ IndentedScope indent(s, node); |
Visit(node); |
} |
@@ -726,7 +739,8 @@ |
for (int i = 0; i < scope->num_parameters(); i++) { |
PrintLiteralWithModeIndented("VAR", scope->parameter(i), |
scope->parameter(i)->name(), |
- scope->parameter(i)->type()); |
+ scope->parameter(i)->type(), |
+ Expression::kNoLabel); |
} |
} |
} |
@@ -771,7 +785,8 @@ |
PrintLiteralWithModeIndented(Variable::Mode2String(node->mode()), |
node->proxy()->AsVariable(), |
node->proxy()->name(), |
- node->proxy()->AsVariable()->type()); |
+ node->proxy()->AsVariable()->type(), |
+ Expression::kNoLabel); |
} else { |
// function declarations |
PrintIndented("FUNCTION "); |
@@ -1007,7 +1022,7 @@ |
void AstPrinter::VisitVariableProxy(VariableProxy* node) { |
PrintLiteralWithModeIndented("VAR PROXY", node->AsVariable(), node->name(), |
- node->type()); |
+ node->type(), node->num()); |
Variable* var = node->var(); |
if (var != NULL && var->rewrite() != NULL) { |
IndentedScope indent; |
@@ -1017,7 +1032,7 @@ |
void AstPrinter::VisitAssignment(Assignment* node) { |
- IndentedScope indent(Token::Name(node->op()), node->type()); |
+ IndentedScope indent(Token::Name(node->op()), node); |
Visit(node->target()); |
Visit(node->value()); |
} |
@@ -1029,7 +1044,7 @@ |
void AstPrinter::VisitProperty(Property* node) { |
- IndentedScope indent("PROPERTY"); |
+ IndentedScope indent("PROPERTY", node); |
Visit(node->obj()); |
Literal* literal = node->key()->AsLiteral(); |
if (literal != NULL && literal->handle()->IsSymbol()) { |
@@ -1082,14 +1097,14 @@ |
void AstPrinter::VisitBinaryOperation(BinaryOperation* node) { |
- IndentedScope indent(Token::Name(node->op()), node->type()); |
+ IndentedScope indent(Token::Name(node->op()), node); |
Visit(node->left()); |
Visit(node->right()); |
} |
void AstPrinter::VisitCompareOperation(CompareOperation* node) { |
- IndentedScope indent(Token::Name(node->op()), node->type()); |
+ IndentedScope indent(Token::Name(node->op()), node); |
Visit(node->left()); |
Visit(node->right()); |
} |