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

Unified Diff: src/wasm/ast-decoder.cc

Issue 1956703002: [wasm] Improve output of PrintAstForDebugging. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 7 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/wasm/ast-decoder.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/wasm/ast-decoder.cc
diff --git a/src/wasm/ast-decoder.cc b/src/wasm/ast-decoder.cc
index 1f361b9998dd63c8243f660226f18624065861d5..1432e152b084ceb9d1c6b1017dac97fadb9ec57f 100644
--- a/src/wasm/ast-decoder.cc
+++ b/src/wasm/ast-decoder.cc
@@ -1524,6 +1524,12 @@ int OpcodeArity(const byte* pc, const byte* end) {
return decoder.OpcodeArity(pc);
}
+void PrintAstForDebugging(const byte* start, const byte* end) {
+ FunctionBody body = {nullptr, nullptr, start, start, end};
+ base::AccountingAllocator allocator;
+ PrintAst(&allocator, body);
+}
+
void PrintAst(base::AccountingAllocator* allocator, FunctionBody& body) {
Zone zone(allocator);
SR_WasmDecoder decoder(&zone, nullptr, body);
@@ -1540,7 +1546,7 @@ void PrintAst(base::AccountingAllocator* allocator, FunctionBody& body) {
decoder.DecodeLocalDecls(decls);
const byte* pc = decoder.pc();
if (body.start != decoder.pc()) {
- printf("// locals:");
+ os << "// locals: ";
for (auto p : decls.local_types) {
LocalType type = p.first;
uint32_t count = p.second;
@@ -1551,64 +1557,90 @@ void PrintAst(base::AccountingAllocator* allocator, FunctionBody& body) {
for (const byte* locals = body.start; locals < pc; locals++) {
printf(" 0x%02x,", *locals);
}
- printf("\n");
+ os << std::endl;
}
- printf("// body: \n");
- std::vector<int> arity_stack;
+ os << "// body: \n";
+ int control_depth = 0;
while (pc < body.end) {
- int arity = decoder.OpcodeArity(pc);
size_t length = decoder.OpcodeLength(pc);
- for (auto arity : arity_stack) {
- printf(" ");
- USE(arity);
- }
-
WasmOpcode opcode = static_cast<WasmOpcode>(*pc);
+ if (opcode == kExprElse) control_depth--;
+
+ for (int i = 0; i < control_depth && i < 32; i++) printf(" ");
printf("k%s,", WasmOpcodes::OpcodeName(opcode));
for (size_t i = 1; i < length; i++) {
printf(" 0x%02x,", pc[i]);
}
- if (body.module) {
- switch (opcode) {
- case kExprCallIndirect: {
- CallIndirectOperand operand(&decoder, pc);
- if (decoder.Validate(pc, operand)) {
- os << " // sig #" << operand.index << ": " << *operand.sig;
- }
- break;
+ switch (opcode) {
+ case kExprIf:
+ case kExprElse:
+ case kExprLoop:
+ case kExprBlock:
+ os << " // @" << static_cast<int>(pc - body.start);
+ control_depth++;
+ break;
+ case kExprEnd:
+ os << " // @" << static_cast<int>(pc - body.start);
+ control_depth--;
+ break;
+ case kExprBr: {
+ BreakDepthOperand operand(&decoder, pc);
+ os << " // arity=" << operand.arity << " depth=" << operand.depth;
+ break;
+ }
+ case kExprBrIf: {
+ BreakDepthOperand operand(&decoder, pc);
+ os << " // arity=" << operand.arity << " depth" << operand.depth;
+ break;
+ }
+ case kExprBrTable: {
+ BranchTableOperand operand(&decoder, pc);
+ os << " // arity=" << operand.arity
+ << " entries=" << operand.table_count;
+ break;
+ }
+ case kExprCallIndirect: {
+ CallIndirectOperand operand(&decoder, pc);
+ if (decoder.Validate(pc, operand)) {
+ os << " // sig #" << operand.index << ": " << *operand.sig;
+ } else {
+ os << " // arity=" << operand.arity << " sig #" << operand.index;
}
- case kExprCallImport: {
- CallImportOperand operand(&decoder, pc);
- if (decoder.Validate(pc, operand)) {
- os << " // import #" << operand.index << ": " << *operand.sig;
- }
- break;
+ break;
+ }
+ case kExprCallImport: {
+ CallImportOperand operand(&decoder, pc);
+ if (decoder.Validate(pc, operand)) {
+ os << " // import #" << operand.index << ": " << *operand.sig;
+ } else {
+ os << " // arity=" << operand.arity << " import #" << operand.index;
}
- case kExprCallFunction: {
- CallFunctionOperand operand(&decoder, pc);
- if (decoder.Validate(pc, operand)) {
- os << " // function #" << operand.index << ": " << *operand.sig;
- }
- break;
+ break;
+ }
+ case kExprCallFunction: {
+ CallFunctionOperand operand(&decoder, pc);
+ if (decoder.Validate(pc, operand)) {
+ os << " // function #" << operand.index << ": " << *operand.sig;
+ } else {
+ os << " // arity=" << operand.arity << " function #" << operand.index;
}
- default:
- break;
+ break;
+ }
+ case kExprReturn: {
+ ReturnArityOperand operand(&decoder, pc);
+ os << " // arity=" << operand.arity;
+ break;
+ }
+ default:
+ break;
}
- }
pc += length;
- printf("\n");
-
- arity_stack.push_back(arity);
- while (arity_stack.back() == 0) {
- arity_stack.pop_back();
- if (arity_stack.empty()) break;
- arity_stack.back()--;
- }
+ os << std::endl;
}
}
« no previous file with comments | « src/wasm/ast-decoder.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698