Index: src/wasm/function-body-decoder.cc |
diff --git a/src/wasm/function-body-decoder.cc b/src/wasm/function-body-decoder.cc |
index 00612b8fde5ef0ccce3eb1b072a18e2f9ef0b2cb..6f8e24ca370a4419b3492ddbeece57359a0405db 100644 |
--- a/src/wasm/function-body-decoder.cc |
+++ b/src/wasm/function-body-decoder.cc |
@@ -1881,14 +1881,25 @@ unsigned OpcodeLength(const byte* pc, const byte* end) { |
void PrintWasmCodeForDebugging(const byte* start, const byte* end) { |
AccountingAllocator allocator; |
- OFStream os(stdout); |
- PrintWasmCode(&allocator, FunctionBodyForTesting(start, end), nullptr, os, |
- nullptr); |
+ PrintWasmCode(&allocator, FunctionBodyForTesting(start, end), nullptr, true); |
+} |
+ |
+const char* OpcodeNameForDebugging(WasmOpcode opcode) { |
titzer
2017/01/25 10:31:06
RawOpcodeName?
ahaas
2017/01/25 13:12:10
Done.
|
+ switch (opcode) { |
+#define DECLARE_NAME_CASE(name, opcode, sig) \ |
+ case kExpr##name: \ |
+ return "kExpr" #name; |
+ FOREACH_OPCODE(DECLARE_NAME_CASE) |
+#undef DECLARE_NAME_CASE |
+ default: |
+ break; |
+ } |
+ return "Unknown"; |
} |
bool PrintWasmCode(AccountingAllocator* allocator, const FunctionBody& body, |
titzer
2017/01/25 10:31:06
I'd be OK with just renaming this method to PrintR
ahaas
2017/01/25 13:12:10
Done.
|
- const wasm::WasmModule* module, std::ostream& os, |
- std::vector<std::tuple<uint32_t, int, int>>* offset_table) { |
+ const wasm::WasmModule* module, bool for_debugging) { |
+ OFStream os(stdout); |
Zone zone(allocator, ZONE_NAME); |
WasmFullDecoder decoder(&zone, module, body); |
int line_nr = 0; |
@@ -1937,16 +1948,17 @@ bool PrintWasmCode(AccountingAllocator* allocator, const FunctionBody& body, |
if (opcode == kExprElse) control_depth--; |
int num_whitespaces = control_depth < 32 ? 2 * control_depth : 64; |
- if (offset_table) { |
- offset_table->push_back( |
- std::make_tuple(i.pc_offset(), line_nr, num_whitespaces)); |
- } |
// 64 whitespaces |
const char* padding = |
" "; |
os.write(padding, num_whitespaces); |
- os << "k" << WasmOpcodes::OpcodeName(opcode) << ","; |
+ |
+ if (for_debugging) { |
+ os << OpcodeNameForDebugging(opcode) << ","; |
+ } else { |
+ os << "k" << WasmOpcodes::OpcodeName(opcode) << ","; |
Clemens Hammacher
2017/01/24 18:51:02
Why is this outputting a "k" in front of the new o
titzer
2017/01/25 10:31:06
Right, the k shouldn't be necessary.
ahaas
2017/01/25 13:12:10
As suggested I changed the output to
os << Raw
|
+ } |
for (size_t j = 1; j < length; ++j) { |
os << " 0x" << AsHex(i.pc()[j], 2) << ","; |