summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/passes/Print.cpp37
-rw-r--r--test/lit/debug/full.wat30
-rw-r--r--test/lit/debug/replace-keep.wat40
3 files changed, 60 insertions, 47 deletions
diff --git a/src/passes/Print.cpp b/src/passes/Print.cpp
index c57ab29c3..4ca5f722b 100644
--- a/src/passes/Print.cpp
+++ b/src/passes/Print.cpp
@@ -48,13 +48,18 @@ static std::ostream& printStackIR(StackIR* ir, PrintSExpression&);
namespace {
-bool isFullForced() {
+bool checkIsFullForced() {
if (getenv("BINARYEN_PRINT_FULL")) {
return std::stoi(getenv("BINARYEN_PRINT_FULL")) != 0;
}
return false;
}
+bool isFullForced() {
+ static bool full = checkIsFullForced();
+ return full;
+}
+
std::ostream& printMemoryName(Name name, std::ostream& o, Module* wasm) {
if (!wasm || wasm->memories.size() > 1) {
o << ' ';
@@ -409,11 +414,12 @@ struct PrintExpressionContents
Function* currFunction = nullptr;
std::ostream& o;
FeatureSet features;
+ bool full;
PrintExpressionContents(PrintSExpression& parent)
: parent(parent), wasm(parent.currModule),
currFunction(parent.currFunction), o(parent.o),
- features(wasm ? wasm->features : FeatureSet::All) {}
+ features(wasm ? wasm->features : FeatureSet::All), full(isFullForced()) {}
std::ostream& printType(Type type) { return parent.printType(type); }
@@ -517,6 +523,11 @@ struct PrintExpressionContents
printMedium(o, "local.set ");
}
printLocal(curr->index, currFunction, o);
+ if (full && currFunction) {
+ o << " (; local type: ";
+ printType(currFunction->getLocalType(curr->index));
+ o << " ;)";
+ }
}
void visitGlobalGet(GlobalGet* curr) {
printMedium(o, "global.get ");
@@ -2463,12 +2474,12 @@ void PrintSExpression::printFullLine(Expression* expression) {
if (!minify) {
doIndent(o, indent);
}
+ visit(expression);
if (full) {
- o << "[";
+ o << " (; ";
printTypeOrName(expression->type, o, currModule);
- o << "] ";
+ o << " ;)";
}
- visit(expression);
o << maybeNewLine;
}
@@ -2508,13 +2519,13 @@ void PrintSExpression::visitBlock(Block* curr) {
printDebugLocation(curr);
}
stack.push_back(curr);
+ o << '(';
+ printExpressionContents(curr);
if (full) {
- o << "[";
+ o << " (; ";
printTypeOrName(curr->type, o, currModule);
- o << "]";
+ o << " ;)";
}
- o << '(';
- printExpressionContents(curr);
incIndent();
if (curr->list.size() > 0 && curr->list[0]->is<Block>()) {
// recurse into the first element
@@ -3370,11 +3381,13 @@ static std::ostream& printExpression(Expression* expression,
print.currModule = wasm;
if (full || isFullForced()) {
print.setFull(true);
- o << "[";
- printTypeOrName(expression->type, o, wasm);
- o << "] ";
}
print.visit(expression);
+ if (full || isFullForced()) {
+ o << " (; ";
+ printTypeOrName(expression->type, o, wasm);
+ o << " ;)";
+ }
return o;
}
diff --git a/test/lit/debug/full.wat b/test/lit/debug/full.wat
index 3ea861611..3e0efca11 100644
--- a/test/lit/debug/full.wat
+++ b/test/lit/debug/full.wat
@@ -27,24 +27,24 @@
;; NRML-NEXT: )
;; NRML-NEXT: )
;; FULL: (func $a
- ;; FULL-NEXT: [none] ;;@ src.cpp:1:2
- ;; FULL-NEXT: [none](block $block
- ;; FULL-NEXT: [none] ;;@ src.cpp:1:2
+ ;; FULL-NEXT: ;;@ src.cpp:1:2
+ ;; FULL-NEXT: (block $block (; none ;)
+ ;; FULL-NEXT: ;;@ src.cpp:1:2
;; FULL-NEXT: (drop
- ;; FULL-NEXT: [i32] ;;@ src.cpp:1:2
- ;; FULL-NEXT: (i32.const 0)
- ;; FULL-NEXT: )
- ;; FULL-NEXT: [none] ;;@ src.cpp:3:4
+ ;; FULL-NEXT: ;;@ src.cpp:1:2
+ ;; FULL-NEXT: (i32.const 0) (; i32 ;)
+ ;; FULL-NEXT: ) (; none ;)
+ ;; FULL-NEXT: ;;@ src.cpp:3:4
;; FULL-NEXT: (drop
- ;; FULL-NEXT: [i32] ;;@ src.cpp:3:4
- ;; FULL-NEXT: (i32.const 1)
- ;; FULL-NEXT: )
- ;; FULL-NEXT: [none] ;;@ src.cpp:3:4
+ ;; FULL-NEXT: ;;@ src.cpp:3:4
+ ;; FULL-NEXT: (i32.const 1) (; i32 ;)
+ ;; FULL-NEXT: ) (; none ;)
+ ;; FULL-NEXT: ;;@ src.cpp:3:4
;; FULL-NEXT: (drop
- ;; FULL-NEXT: [i32] ;;@ src.cpp:3:4
- ;; FULL-NEXT: (i32.const 2)
- ;; FULL-NEXT: )
- ;; FULL-NEXT: ) ;; end block block
+ ;; FULL-NEXT: ;;@ src.cpp:3:4
+ ;; FULL-NEXT: (i32.const 2) (; i32 ;)
+ ;; FULL-NEXT: ) (; none ;)
+ ;; FULL-NEXT: ) ;; end block block (; none ;)
;; FULL-NEXT: )
(func $a
;;@ src.cpp:1:2
diff --git a/test/lit/debug/replace-keep.wat b/test/lit/debug/replace-keep.wat
index 4c073aeab..f8fc64f65 100644
--- a/test/lit/debug/replace-keep.wat
+++ b/test/lit/debug/replace-keep.wat
@@ -9,16 +9,16 @@
(module
;; CHECK: (func $test
;; CHECK-NEXT: (local $temp i32)
- ;; CHECK-NEXT: [none] ;;@ src.cpp:200:2
- ;; CHECK-NEXT: [none](block
- ;; CHECK-NEXT: [none] ;;@ src.cpp:200:2
- ;; CHECK-NEXT: (call $test)
- ;; CHECK-NEXT: [none] ;;@ src.cpp:200:2
- ;; CHECK-NEXT: (local.set $temp
- ;; CHECK-NEXT: [i32] ;;@ src.cpp:200:2
- ;; CHECK-NEXT: (i32.const 1)
- ;; CHECK-NEXT: )
- ;; CHECK-NEXT: ) ;; end block
+ ;; CHECK-NEXT: ;;@ src.cpp:200:2
+ ;; CHECK-NEXT: (block (; none ;)
+ ;; CHECK-NEXT: ;;@ src.cpp:200:2
+ ;; CHECK-NEXT: (call $test) (; none ;)
+ ;; CHECK-NEXT: ;;@ src.cpp:200:2
+ ;; CHECK-NEXT: (local.set $temp (; local type: i32 ;)
+ ;; CHECK-NEXT: ;;@ src.cpp:200:2
+ ;; CHECK-NEXT: (i32.const 1) (; i32 ;)
+ ;; CHECK-NEXT: ) (; none ;)
+ ;; CHECK-NEXT: ) ;; end block (; none ;)
;; CHECK-NEXT: )
(func $test
(local $temp i32)
@@ -40,16 +40,16 @@
;; CHECK: (func $test-no-trample
;; CHECK-NEXT: (local $temp i32)
- ;; CHECK-NEXT: [none] ;;@ src.cpp:300:3
- ;; CHECK-NEXT: [none](block
- ;; CHECK-NEXT: [none] ;;@ src.cpp:400:4
- ;; CHECK-NEXT: (call $test)
- ;; CHECK-NEXT: [none] ;;@ src.cpp:200:2
- ;; CHECK-NEXT: (local.set $temp
- ;; CHECK-NEXT: [i32] ;;@ src.cpp:500:5
- ;; CHECK-NEXT: (i32.const 1)
- ;; CHECK-NEXT: )
- ;; CHECK-NEXT: ) ;; end block
+ ;; CHECK-NEXT: ;;@ src.cpp:300:3
+ ;; CHECK-NEXT: (block (; none ;)
+ ;; CHECK-NEXT: ;;@ src.cpp:400:4
+ ;; CHECK-NEXT: (call $test) (; none ;)
+ ;; CHECK-NEXT: ;;@ src.cpp:200:2
+ ;; CHECK-NEXT: (local.set $temp (; local type: i32 ;)
+ ;; CHECK-NEXT: ;;@ src.cpp:500:5
+ ;; CHECK-NEXT: (i32.const 1) (; i32 ;)
+ ;; CHECK-NEXT: ) (; none ;)
+ ;; CHECK-NEXT: ) ;; end block (; none ;)
;; CHECK-NEXT: )
(func $test-no-trample
(local $temp i32)