diff options
Diffstat (limited to 'src/passes')
-rw-r--r-- | src/passes/LowerCase.cpp | 2 | ||||
-rw-r--r-- | src/passes/LowerIfElse.cpp | 2 | ||||
-rw-r--r-- | src/passes/LowerInt64.cpp | 3 | ||||
-rw-r--r-- | src/passes/Print.cpp | 17 |
4 files changed, 19 insertions, 5 deletions
diff --git a/src/passes/LowerCase.cpp b/src/passes/LowerCase.cpp index f890de411..c0ab8d235 100644 --- a/src/passes/LowerCase.cpp +++ b/src/passes/LowerCase.cpp @@ -84,11 +84,13 @@ struct LowerCase : public WalkerPass<WasmWalker<LowerCase, void>> { if (curr->cases.size() == 0) return; auto top = allocator->alloc<Block>(); top->list.push_back(curr); + top->finalize(); for (auto& c : curr->cases) { top->name = c.name; auto next = allocator->alloc<Block>(); next->list.push_back(top); next->list.push_back(c.body); + next->finalize(); top = next; } curr->cases.clear(); diff --git a/src/passes/LowerIfElse.cpp b/src/passes/LowerIfElse.cpp index fa575d87d..922a294d2 100644 --- a/src/passes/LowerIfElse.cpp +++ b/src/passes/LowerIfElse.cpp @@ -49,7 +49,7 @@ struct LowerIfElse : public WalkerPass<WasmWalker<LowerIfElse, void>> { block->name = name; block->list.push_back(curr); block->list.push_back(curr->ifFalse); - block->type = curr->type; + block->finalize(); curr->ifFalse = nullptr; auto break_ = allocator->alloc<Break>(); break_->name = name; diff --git a/src/passes/LowerInt64.cpp b/src/passes/LowerInt64.cpp index 58e56cba6..7af7443e5 100644 --- a/src/passes/LowerInt64.cpp +++ b/src/passes/LowerInt64.cpp @@ -112,7 +112,7 @@ struct LowerInt64 : public Pass { ret->list.push_back(curr); ret->list.push_back(set); ret->list.push_back(low); // so the block returns the low bits - ret->type = i32; + ret->finalize(); fixes[ret] = high; replaceCurrent(ret); } @@ -132,6 +132,7 @@ struct LowerInt64 : public Pass { set->type = value->type; ret->list.push_back(set); } + ret->finalize(); return ret; } diff --git a/src/passes/Print.cpp b/src/passes/Print.cpp index f365db02f..e8e917a6e 100644 --- a/src/passes/Print.cpp +++ b/src/passes/Print.cpp @@ -65,11 +65,22 @@ struct PrintSExpression : public WasmVisitor<PrintSExpression, void> { decIndent(); } void visitIf(If *curr) { - printOpening(o, curr->ifFalse ? "if_else" : "if"); + printOpening(o, "if"); incIndent(); printFullLine(curr->condition); - printFullLine(curr->ifTrue); - if (curr->ifFalse) printFullLine(curr->ifFalse); + // ifTrue and False have implict blocks, avoid printing them if possible + if (curr->ifTrue->is<Block>() && curr->ifTrue->dyn_cast<Block>()->name.isNull() && curr->ifTrue->dyn_cast<Block>()->list.size() == 1) { + printFullLine(curr->ifTrue->dyn_cast<Block>()->list.back()); + } else { + printFullLine(curr->ifTrue); + } + if (curr->ifFalse) { + if (curr->ifFalse->is<Block>() && curr->ifFalse->dyn_cast<Block>()->name.isNull() && curr->ifFalse->dyn_cast<Block>()->list.size() == 1) { + printFullLine(curr->ifFalse->dyn_cast<Block>()->list.back()); + } else { + printFullLine(curr->ifFalse); + } + } decIndent(); } void visitLoop(Loop *curr) { |