diff options
Diffstat (limited to 'src/wasm-traversal.h')
-rw-r--r-- | src/wasm-traversal.h | 124 |
1 files changed, 62 insertions, 62 deletions
diff --git a/src/wasm-traversal.h b/src/wasm-traversal.h index 620ff0161..0b8097f56 100644 --- a/src/wasm-traversal.h +++ b/src/wasm-traversal.h @@ -35,40 +35,40 @@ namespace wasm { template<typename SubType, typename ReturnType = void> struct Visitor { // Expression visitors - ReturnType visitBlock(Block *curr) {} - ReturnType visitIf(If *curr) {} - ReturnType visitLoop(Loop *curr) {} - ReturnType visitBreak(Break *curr) {} - ReturnType visitSwitch(Switch *curr) {} - ReturnType visitCall(Call *curr) {} - ReturnType visitCallImport(CallImport *curr) {} - ReturnType visitCallIndirect(CallIndirect *curr) {} - ReturnType visitGetLocal(GetLocal *curr) {} - ReturnType visitSetLocal(SetLocal *curr) {} - ReturnType visitGetGlobal(GetGlobal *curr) {} - ReturnType visitSetGlobal(SetGlobal *curr) {} - ReturnType visitLoad(Load *curr) {} - ReturnType visitStore(Store *curr) {} - ReturnType visitConst(Const *curr) {} - ReturnType visitUnary(Unary *curr) {} - ReturnType visitBinary(Binary *curr) {} - ReturnType visitSelect(Select *curr) {} - ReturnType visitDrop(Drop *curr) {} - ReturnType visitReturn(Return *curr) {} - ReturnType visitHost(Host *curr) {} - ReturnType visitNop(Nop *curr) {} - ReturnType visitUnreachable(Unreachable *curr) {} + ReturnType visitBlock(Block* curr) {} + ReturnType visitIf(If* curr) {} + ReturnType visitLoop(Loop* curr) {} + ReturnType visitBreak(Break* curr) {} + ReturnType visitSwitch(Switch* curr) {} + ReturnType visitCall(Call* curr) {} + ReturnType visitCallImport(CallImport* curr) {} + ReturnType visitCallIndirect(CallIndirect* curr) {} + ReturnType visitGetLocal(GetLocal* curr) {} + ReturnType visitSetLocal(SetLocal* curr) {} + ReturnType visitGetGlobal(GetGlobal* curr) {} + ReturnType visitSetGlobal(SetGlobal* curr) {} + ReturnType visitLoad(Load* curr) {} + ReturnType visitStore(Store* curr) {} + ReturnType visitConst(Const* curr) {} + ReturnType visitUnary(Unary* curr) {} + ReturnType visitBinary(Binary* curr) {} + ReturnType visitSelect(Select* curr) {} + ReturnType visitDrop(Drop* curr) {} + ReturnType visitReturn(Return* curr) {} + ReturnType visitHost(Host* curr) {} + ReturnType visitNop(Nop* curr) {} + ReturnType visitUnreachable(Unreachable* curr) {} // Module-level visitors - ReturnType visitFunctionType(FunctionType *curr) {} - ReturnType visitImport(Import *curr) {} - ReturnType visitExport(Export *curr) {} - ReturnType visitGlobal(Global *curr) {} - ReturnType visitFunction(Function *curr) {} - ReturnType visitTable(Table *curr) {} - ReturnType visitMemory(Memory *curr) {} - ReturnType visitModule(Module *curr) {} - - ReturnType visit(Expression *curr) { + ReturnType visitFunctionType(FunctionType* curr) {} + ReturnType visitImport(Import* curr) {} + ReturnType visitExport(Export* curr) {} + ReturnType visitGlobal(Global* curr) {} + ReturnType visitFunction(Function* curr) {} + ReturnType visitTable(Table* curr) {} + ReturnType visitMemory(Memory* curr) {} + ReturnType visitModule(Module* curr) {} + + ReturnType visit(Expression* curr) { assert(curr); #define DELEGATE(CLASS_TO_VISIT) \ @@ -116,29 +116,29 @@ struct UnifiedExpressionVisitor : public Visitor<SubType> { ReturnType visitExpression(Expression* curr) {} // redirects - ReturnType visitBlock(Block *curr) { return static_cast<SubType*>(this)->visitExpression(curr); } - ReturnType visitIf(If *curr) { return static_cast<SubType*>(this)->visitExpression(curr); } - ReturnType visitLoop(Loop *curr) { return static_cast<SubType*>(this)->visitExpression(curr); } - ReturnType visitBreak(Break *curr) { return static_cast<SubType*>(this)->visitExpression(curr); } - ReturnType visitSwitch(Switch *curr) { return static_cast<SubType*>(this)->visitExpression(curr); } - ReturnType visitCall(Call *curr) { return static_cast<SubType*>(this)->visitExpression(curr); } - ReturnType visitCallImport(CallImport *curr) { return static_cast<SubType*>(this)->visitExpression(curr); } - ReturnType visitCallIndirect(CallIndirect *curr) { return static_cast<SubType*>(this)->visitExpression(curr); } - ReturnType visitGetLocal(GetLocal *curr) { return static_cast<SubType*>(this)->visitExpression(curr); } - ReturnType visitSetLocal(SetLocal *curr) { return static_cast<SubType*>(this)->visitExpression(curr); } - ReturnType visitGetGlobal(GetGlobal *curr) { return static_cast<SubType*>(this)->visitExpression(curr); } - ReturnType visitSetGlobal(SetGlobal *curr) { return static_cast<SubType*>(this)->visitExpression(curr); } - ReturnType visitLoad(Load *curr) { return static_cast<SubType*>(this)->visitExpression(curr); } - ReturnType visitStore(Store *curr) { return static_cast<SubType*>(this)->visitExpression(curr); } - ReturnType visitConst(Const *curr) { return static_cast<SubType*>(this)->visitExpression(curr); } - ReturnType visitUnary(Unary *curr) { return static_cast<SubType*>(this)->visitExpression(curr); } - ReturnType visitBinary(Binary *curr) { return static_cast<SubType*>(this)->visitExpression(curr); } - ReturnType visitSelect(Select *curr) { return static_cast<SubType*>(this)->visitExpression(curr); } - ReturnType visitDrop(Drop *curr) { return static_cast<SubType*>(this)->visitExpression(curr); } - ReturnType visitReturn(Return *curr) { return static_cast<SubType*>(this)->visitExpression(curr); } - ReturnType visitHost(Host *curr) { return static_cast<SubType*>(this)->visitExpression(curr); } - ReturnType visitNop(Nop *curr) { return static_cast<SubType*>(this)->visitExpression(curr); } - ReturnType visitUnreachable(Unreachable *curr) { return static_cast<SubType*>(this)->visitExpression(curr); } + ReturnType visitBlock(Block* curr) { return static_cast<SubType*>(this)->visitExpression(curr); } + ReturnType visitIf(If* curr) { return static_cast<SubType*>(this)->visitExpression(curr); } + ReturnType visitLoop(Loop* curr) { return static_cast<SubType*>(this)->visitExpression(curr); } + ReturnType visitBreak(Break* curr) { return static_cast<SubType*>(this)->visitExpression(curr); } + ReturnType visitSwitch(Switch* curr) { return static_cast<SubType*>(this)->visitExpression(curr); } + ReturnType visitCall(Call* curr) { return static_cast<SubType*>(this)->visitExpression(curr); } + ReturnType visitCallImport(CallImport* curr) { return static_cast<SubType*>(this)->visitExpression(curr); } + ReturnType visitCallIndirect(CallIndirect* curr) { return static_cast<SubType*>(this)->visitExpression(curr); } + ReturnType visitGetLocal(GetLocal* curr) { return static_cast<SubType*>(this)->visitExpression(curr); } + ReturnType visitSetLocal(SetLocal* curr) { return static_cast<SubType*>(this)->visitExpression(curr); } + ReturnType visitGetGlobal(GetGlobal* curr) { return static_cast<SubType*>(this)->visitExpression(curr); } + ReturnType visitSetGlobal(SetGlobal* curr) { return static_cast<SubType*>(this)->visitExpression(curr); } + ReturnType visitLoad(Load* curr) { return static_cast<SubType*>(this)->visitExpression(curr); } + ReturnType visitStore(Store* curr) { return static_cast<SubType*>(this)->visitExpression(curr); } + ReturnType visitConst(Const* curr) { return static_cast<SubType*>(this)->visitExpression(curr); } + ReturnType visitUnary(Unary* curr) { return static_cast<SubType*>(this)->visitExpression(curr); } + ReturnType visitBinary(Binary* curr) { return static_cast<SubType*>(this)->visitExpression(curr); } + ReturnType visitSelect(Select* curr) { return static_cast<SubType*>(this)->visitExpression(curr); } + ReturnType visitDrop(Drop* curr) { return static_cast<SubType*>(this)->visitExpression(curr); } + ReturnType visitReturn(Return* curr) { return static_cast<SubType*>(this)->visitExpression(curr); } + ReturnType visitHost(Host* curr) { return static_cast<SubType*>(this)->visitExpression(curr); } + ReturnType visitNop(Nop* curr) { return static_cast<SubType*>(this)->visitExpression(curr); } + ReturnType visitUnreachable(Unreachable* curr) { return static_cast<SubType*>(this)->visitExpression(curr); } }; // @@ -156,7 +156,7 @@ struct Walker : public VisitorType { // Note that the visit*() for the result node is not called for you (i.e., // just one visit*() method is called by the traversal; if you replace a node, // and you want to process the output, you must do that explicitly). - Expression* replaceCurrent(Expression *expression) { + Expression* replaceCurrent(Expression* expression) { return replace = expression; } @@ -183,14 +183,14 @@ struct Walker : public VisitorType { walk(func->body); } - void walkModule(Module *module) { + void walkModule(Module* module) { setModule(module); static_cast<SubType*>(this)->doWalkModule(module); static_cast<SubType*>(this)->visitModule(module); } // override this to provide custom functionality - void doWalkModule(Module *module) { + void doWalkModule(Module* module) { // Dispatch statically through the SubType. SubType* self = static_cast<SubType*>(this); for (auto& curr : module->functionTypes) { @@ -281,16 +281,16 @@ struct Walker : public VisitorType { static void doVisitNop(SubType* self, Expression** currp) { self->visitNop((*currp)->cast<Nop>()); } static void doVisitUnreachable(SubType* self, Expression** currp) { self->visitUnreachable((*currp)->cast<Unreachable>()); } - void setModule(Module *module) { + void setModule(Module* module) { currModule = module; } - void setFunction(Function *func) { + void setFunction(Function* func) { currFunction = func; } private: - Expression *replace = nullptr; // a node to replace + Expression* replace = nullptr; // a node to replace std::vector<Task> stack; // stack of tasks Function* currFunction = nullptr; // current function being processed Module* currModule = nullptr; // current module being processed |