summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/wasm-traversal.h52
1 files changed, 25 insertions, 27 deletions
diff --git a/src/wasm-traversal.h b/src/wasm-traversal.h
index d3d606ae4..11d8a5563 100644
--- a/src/wasm-traversal.h
+++ b/src/wasm-traversal.h
@@ -103,8 +103,31 @@ struct WasmVisitor {
template<typename SubType, typename ReturnType = void>
struct WasmWalkerBase : public WasmVisitor<SubType, ReturnType> {
virtual void walk(Expression*& curr) { abort(); }
- virtual void startWalk(Function *func) { abort(); }
- virtual void startWalk(Module *module) { abort(); }
+
+ void startWalk(Function *func) {
+ walk(func->body);
+ }
+
+ void startWalk(Module *module) {
+ // Dispatch statically through the SubType.
+ SubType* self = static_cast<SubType*>(this);
+ for (auto curr : module->functionTypes) {
+ self->visitFunctionType(curr);
+ }
+ for (auto curr : module->imports) {
+ self->visitImport(curr);
+ }
+ for (auto curr : module->exports) {
+ self->visitExport(curr);
+ }
+ for (auto curr : module->functions) {
+ startWalk(curr);
+ self->visitFunction(curr);
+ }
+ self->visitTable(&module->table);
+ self->visitMemory(&module->memory);
+ self->visitModule(module);
+ }
};
template<typename ParentType>
@@ -285,31 +308,6 @@ struct WasmWalker : public WasmReplacerWalker<SubType, ReturnType> {
WasmReplacerWalker<SubType, ReturnType>::walk(curr);
}
-
- void startWalk(Function *func) override {
- walk(func->body);
- }
-
- void startWalk(Module *module) override {
- // Dispatch statically through the SubType.
- SubType* self = static_cast<SubType*>(this);
- for (auto curr : module->functionTypes) {
- self->visitFunctionType(curr);
- }
- for (auto curr : module->imports) {
- self->visitImport(curr);
- }
- for (auto curr : module->exports) {
- self->visitExport(curr);
- }
- for (auto curr : module->functions) {
- startWalk(curr);
- self->visitFunction(curr);
- }
- self->visitTable(&module->table);
- self->visitMemory(&module->memory);
- self->visitModule(module);
- }
};
// Traversal in the order of execution. This is quick and simple, but