summaryrefslogtreecommitdiff
path: root/src/wasm-traversal.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/wasm-traversal.h')
-rw-r--r--src/wasm-traversal.h19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/wasm-traversal.h b/src/wasm-traversal.h
index d7fc83f59..9ed02027e 100644
--- a/src/wasm-traversal.h
+++ b/src/wasm-traversal.h
@@ -184,9 +184,23 @@ struct Walker : public VisitorType {
// Walk starting
- void startWalk(Module *module) {
+ void walkFunction(Function* func) {
+ setFunction(func);
+ static_cast<SubType*>(this)->doWalkFunction(func);
+ }
+
+ // override this to provide custom functionality
+ void doWalkFunction(Function* func) {
+ walk(func->body);
+ }
+
+ void walkModule(Module *module) {
setModule(module);
+ static_cast<SubType*>(this)->doWalkModule(module);
+ }
+ // override this to provide custom functionality
+ void doWalkModule(Module *module) {
// Dispatch statically through the SubType.
SubType* self = static_cast<SubType*>(this);
for (auto& curr : module->functionTypes) {
@@ -208,8 +222,7 @@ struct Walker : public VisitorType {
instance->setModule(module);
allocated = std::unique_ptr<SubType>(instance);
}
- instance->setFunction(func);
- instance->walk(func->body);
+ instance->walkFunction(func);
instance->visitFunction(func);
};