Reviewers: rossberg,
Message:
Hi Andreas,
Here is the ast pretty printing support for vectors we discussed yesterday.
Thanks for the look!
--Michael
Description:
VectorICs: --print-ast now prints allocated vector slots
Looks like this:
--- AST ---
FUNC
. NAME "foo"
. INFERRED NAME ""
. RETURN
. . PROPERTY ICSlot(0, LOAD_IC)
. . . VAR PROXY ICSlot(1, LOAD_IC) (mode = DYNAMIC_GLOBAL) "a"
. . . NAME x
BUG=
[email protected]
Please review this at https://codereview.chromium.org/1264823003/
Base URL: https://chromium.googlesource.com/v8/v8.git@master
Affected files (+26, -5 lines):
M src/prettyprinter.cc
Index: src/prettyprinter.cc
diff --git a/src/prettyprinter.cc b/src/prettyprinter.cc
index
6a7718a3233260223350f1e07b577f63b339ab78..9bc4e6a562866d6293cbaf4e76595c2bf9c0970d
100644
--- a/src/prettyprinter.cc
+++ b/src/prettyprinter.cc
@@ -419,6 +419,18 @@ void CallPrinter::PrintLiteral(const AstRawString*
value, bool quote) {
#ifdef DEBUG
+// A helper for ast nodes that use FeedbackVectorICSlots.
+static int FormatICSlotNode(Vector<char>* buf, Expression* node,
+ const char* node_name, FeedbackVectorICSlot
slot) {
+ int pos = SNPrintF(*buf, "%s", node_name);
+ if (!slot.IsInvalid()) {
+ const char* str = Code::Kind2String(node->FeedbackICSlotKind(0));
+ pos = SNPrintF(*buf + pos, " ICSlot(%d, %s)", slot.ToInt(), str);
+ }
+ return pos;
+}
+
+
PrettyPrinter::PrettyPrinter(Isolate* isolate, Zone* zone) {
output_ = NULL;
size_ = 0;
@@ -1430,11 +1442,12 @@ void AstPrinter::VisitArrayLiteral(ArrayLiteral*
node) {
}
-// TODO(svenpanne) Start with IndentedScope.
void AstPrinter::VisitVariableProxy(VariableProxy* node) {
Variable* var = node->var();
EmbeddedVector<char, 128> buf;
- int pos = SNPrintF(buf, "VAR PROXY");
+ int pos =
+ FormatICSlotNode(&buf, node, "VAR PROXY",
node->VariableFeedbackSlot());
+
switch (var->location()) {
case VariableLocation::UNALLOCATED:
break;
@@ -1478,7 +1491,10 @@ void AstPrinter::VisitThrow(Throw* node) {
void AstPrinter::VisitProperty(Property* node) {
- IndentedScope indent(this, "PROPERTY");
+ EmbeddedVector<char, 128> buf;
+ FormatICSlotNode(&buf, node, "PROPERTY", node->PropertyFeedbackSlot());
+ IndentedScope indent(this, buf.start());
+
Visit(node->obj());
Literal* literal = node->key()->AsLiteral();
if (literal != NULL && literal->value()->IsInternalizedString()) {
@@ -1490,7 +1506,10 @@ void AstPrinter::VisitProperty(Property* node) {
void AstPrinter::VisitCall(Call* node) {
- IndentedScope indent(this, "CALL");
+ EmbeddedVector<char, 128> buf;
+ FormatICSlotNode(&buf, node, "CALL", node->CallFeedbackICSlot());
+ IndentedScope indent(this, buf.start());
+
Visit(node->expression());
PrintArguments(node->arguments());
}
@@ -1504,7 +1523,9 @@ void AstPrinter::VisitCallNew(CallNew* node) {
void AstPrinter::VisitCallRuntime(CallRuntime* node) {
- IndentedScope indent(this, "CALL RUNTIME");
+ EmbeddedVector<char, 128> buf;
+ FormatICSlotNode(&buf, node, "CALL RUNTIME",
node->CallRuntimeFeedbackSlot());
+ IndentedScope indent(this, buf.start());
PrintLiteralIndented("NAME", node->name(), false);
PrintArguments(node->arguments());
}
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.