Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(23)

Unified Diff: src/prettyprinter.cc

Issue 8835: Track whether a node or variable are likely to be a Smi value. Propagate that... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 12 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/prettyprinter.h ('k') | src/rewriter.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/prettyprinter.cc
===================================================================
--- src/prettyprinter.cc (revision 629)
+++ src/prettyprinter.cc (working copy)
@@ -588,8 +588,13 @@
ast_printer_->inc_indent();
}
- explicit IndentedScope(const char* txt) {
+ explicit IndentedScope(const char* txt, StaticType* type = NULL) {
ast_printer_->PrintIndented(txt);
+ if ((type != NULL) && (type->IsKnown())) {
+ ast_printer_->Print(" (type = ");
+ ast_printer_->Print(StaticType::Type2String(type));
+ ast_printer_->Print(")");
+ }
ast_printer_->Print("\n");
ast_printer_->inc_indent();
}
@@ -645,13 +650,20 @@
void AstPrinter::PrintLiteralWithModeIndented(const char* info,
Variable* var,
- Handle<Object> value) {
+ Handle<Object> value,
+ StaticType* type) {
if (var == NULL) {
PrintLiteralIndented(info, value, true);
} else {
EmbeddedVector<char, 256> buf;
- 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()));
+ }
PrintLiteralIndented(buf.start(), value, true);
}
}
@@ -706,7 +718,8 @@
IndentedScope indent("PARAMS");
for (int i = 0; i < scope->num_parameters(); i++) {
PrintLiteralWithModeIndented("VAR ", scope->parameter(i),
- scope->parameter(i)->name());
+ scope->parameter(i)->name(),
+ scope->parameter(i)->type());
}
}
}
@@ -748,9 +761,10 @@
void AstPrinter::VisitDeclaration(Declaration* node) {
if (node->fun() == NULL) {
// var or const declarations
- PrintLiteralWithModeIndented(
- Variable::Mode2String(node->mode()),
- node->proxy()->AsVariable(), node->proxy()->name());
+ PrintLiteralWithModeIndented(Variable::Mode2String(node->mode()),
+ node->proxy()->AsVariable(),
+ node->proxy()->name(),
+ node->proxy()->AsVariable()->type());
} else {
// function declarations
PrintIndented("FUNCTION ");
@@ -960,7 +974,8 @@
void AstPrinter::VisitVariableProxy(VariableProxy* node) {
- PrintLiteralWithModeIndented("VAR PROXY", node->AsVariable(), node->name());
+ PrintLiteralWithModeIndented("VAR PROXY", node->AsVariable(), node->name(),
+ node->type());
Variable* var = node->var();
if (var != NULL && var->rewrite() != NULL) {
IndentedScope indent;
@@ -970,7 +985,7 @@
void AstPrinter::VisitAssignment(Assignment* node) {
- IndentedScope indent(Token::Name(node->op()));
+ IndentedScope indent(Token::Name(node->op()), node->type());
Visit(node->target());
Visit(node->value());
}
@@ -1021,21 +1036,28 @@
void AstPrinter::VisitCountOperation(CountOperation* node) {
EmbeddedVector<char, 128> buf;
- OS::SNPrintF(buf, "%s %s", (node->is_prefix() ? "PRE" : "POST"),
- Token::Name(node->op()));
+ if (node->type()->IsKnown()) {
+ OS::SNPrintF(buf, "%s %s (type = %s)",
+ (node->is_prefix() ? "PRE" : "POST"),
+ Token::Name(node->op()),
+ StaticType::Type2String(node->type()));
+ } else {
+ OS::SNPrintF(buf, "%s %s", (node->is_prefix() ? "PRE" : "POST"),
+ Token::Name(node->op()));
+ }
PrintIndentedVisit(buf.start(), node->expression());
}
void AstPrinter::VisitBinaryOperation(BinaryOperation* node) {
- IndentedScope indent(Token::Name(node->op()));
+ IndentedScope indent(Token::Name(node->op()), node->type());
Visit(node->left());
Visit(node->right());
}
void AstPrinter::VisitCompareOperation(CompareOperation* node) {
- IndentedScope indent(Token::Name(node->op()));
+ IndentedScope indent(Token::Name(node->op()), node->type());
Visit(node->left());
Visit(node->right());
}
« no previous file with comments | « src/prettyprinter.h ('k') | src/rewriter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698