summaryrefslogtreecommitdiff
path: root/src/ast_utils.h
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2016-08-28 19:20:53 -0700
committerAlon Zakai <alonzakai@gmail.com>2016-09-07 09:55:58 -0700
commit0793f2f87ca023e1769c7e7d4c64fa16d7fec1a2 (patch)
tree1c0b536c0c44be2935aeb5e0140f1990c01bcec0 /src/ast_utils.h
parentd58adf43956c65615c9cd8d6c2f4c2a3cceff8bb (diff)
downloadbinaryen-0793f2f87ca023e1769c7e7d4c64fa16d7fec1a2.tar.gz
binaryen-0793f2f87ca023e1769c7e7d4c64fa16d7fec1a2.tar.bz2
binaryen-0793f2f87ca023e1769c7e7d4c64fa16d7fec1a2.zip
Add a ReFinalize helper, and use that to properly handle asm.js imports whose return value is polymorphic
Diffstat (limited to 'src/ast_utils.h')
-rw-r--r--src/ast_utils.h28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/ast_utils.h b/src/ast_utils.h
index 0bb0a821e..9b2ff10cd 100644
--- a/src/ast_utils.h
+++ b/src/ast_utils.h
@@ -821,6 +821,34 @@ struct AutoDrop : public WalkerPass<ExpressionStackWalker<AutoDrop, Visitor<Auto
}
};
+// Finalizes a node
+
+struct ReFinalize : public WalkerPass<PostWalker<ReFinalize, Visitor<ReFinalize>>> {
+ void visitBlock(Block *curr) { curr->finalize(); }
+ void visitIf(If *curr) { curr->finalize(); }
+ void visitLoop(Loop *curr) { curr->finalize(); }
+ void visitBreak(Break *curr) { curr->finalize(); }
+ void visitSwitch(Switch *curr) { curr->finalize(); }
+ void visitCall(Call *curr) { curr->finalize(); }
+ void visitCallImport(CallImport *curr) { curr->finalize(); }
+ void visitCallIndirect(CallIndirect *curr) { curr->finalize(); }
+ void visitGetLocal(GetLocal *curr) { curr->finalize(); }
+ void visitSetLocal(SetLocal *curr) { curr->finalize(); }
+ void visitGetGlobal(GetGlobal *curr) { curr->finalize(); }
+ void visitSetGlobal(SetGlobal *curr) { curr->finalize(); }
+ void visitLoad(Load *curr) { curr->finalize(); }
+ void visitStore(Store *curr) { curr->finalize(); }
+ void visitConst(Const *curr) { curr->finalize(); }
+ void visitUnary(Unary *curr) { curr->finalize(); }
+ void visitBinary(Binary *curr) { curr->finalize(); }
+ void visitSelect(Select *curr) { curr->finalize(); }
+ void visitDrop(Drop *curr) { curr->finalize(); }
+ void visitReturn(Return *curr) { curr->finalize(); }
+ void visitHost(Host *curr) { curr->finalize(); }
+ void visitNop(Nop *curr) { curr->finalize(); }
+ void visitUnreachable(Unreachable *curr) { curr->finalize(); }
+};
+
} // namespace wasm
#endif // wasm_ast_utils_h