diff options
Diffstat (limited to 'src/pass.h')
-rw-r--r-- | src/pass.h | 38 |
1 files changed, 21 insertions, 17 deletions
diff --git a/src/pass.h b/src/pass.h index 691583f2b..82b3e3c40 100644 --- a/src/pass.h +++ b/src/pass.h @@ -89,20 +89,24 @@ struct PassRunner { // Core pass class // class Pass { - public: - // Override this to perform preparation work before the pass runs +public: + virtual ~Pass() {}; + // Override this to perform preparation work before the pass runs. virtual void prepare(PassRunner* runner, Module* module) {} - virtual void run(PassRunner* runner, Module* module) { abort(); } - virtual ~Pass() {} + virtual void run(PassRunner* runner, Module* module) = 0; +protected: + Pass() {} + Pass(Pass &) {} + Pass &operator=(const Pass&) = delete; }; // // Core pass class that uses AST walking. This class can be parameterized by // different types of AST walkers. // -template <class WalkerType> +template <typename WalkerType> class WalkerPass : public Pass, public WalkerType { - public: +public: void run(PassRunner* runner, Module* module) override { prepare(runner, module); WalkerType::startWalk(module); @@ -114,22 +118,22 @@ class WalkerPass : public Pass, public WalkerType { // e.g. through PassRunner::getLast // Handles names in a module, in particular adding names without duplicates -class NameManager : public WalkerPass<WasmWalker> { +class NameManager : public WalkerPass<WasmWalker<NameManager, void> > { public: Name getUnique(std::string prefix); // TODO: getUniqueInFunction // visitors - void visitBlock(Block* curr) override; - void visitLoop(Loop* curr) override; - void visitBreak(Break* curr) override; - void visitSwitch(Switch* curr) override; - void visitCall(Call* curr) override; - void visitCallImport(CallImport* curr) override; - void visitFunctionType(FunctionType* curr) override; - void visitFunction(Function* curr) override; - void visitImport(Import* curr) override; - void visitExport(Export* curr) override; + void visitBlock(Block* curr); + void visitLoop(Loop* curr); + void visitBreak(Break* curr); + void visitSwitch(Switch* curr); + void visitCall(Call* curr); + void visitCallImport(CallImport* curr); + void visitFunctionType(FunctionType* curr); + void visitFunction(Function* curr); + void visitImport(Import* curr); + void visitExport(Export* curr); private: std::set<Name> names; |