diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/binaryen-shell.cpp | 2 | ||||
-rw-r--r-- | src/pass.cpp | 18 | ||||
-rw-r--r-- | src/pass.h | 21 | ||||
-rw-r--r-- | src/passes/LowerIfElse.cpp | 4 | ||||
-rw-r--r-- | src/passes/NameManager.cpp | 2 |
5 files changed, 25 insertions, 22 deletions
diff --git a/src/binaryen-shell.cpp b/src/binaryen-shell.cpp index 97f7f1346..c7357e141 100644 --- a/src/binaryen-shell.cpp +++ b/src/binaryen-shell.cpp @@ -175,7 +175,7 @@ int main(int argc, char **argv) { std::cout << "passes:\n"; auto allPasses = PassRegistry::get()->getRegisteredNames(); for (auto& name : allPasses) { - std::cout << " -" << name << "\n"; + std::cout << " -" << name << " : " << PassRegistry::get()->getPassDescription(name) << "\n"; } std::cout << "\n"; exit(0); diff --git a/src/pass.cpp b/src/pass.cpp index 25e7a41e5..fe147891c 100644 --- a/src/pass.cpp +++ b/src/pass.cpp @@ -13,25 +13,29 @@ PassRegistry* PassRegistry::get() { return manager; } -void PassRegistry::registerPass(const char* name, Creator create) { - assert(passCreatorMap.find(name) == passCreatorMap.end()); - passCreatorMap[name] = create; +void PassRegistry::registerPass(const char* name, const char *description, Creator create) { + assert(passInfos.find(name) == passInfos.end()); + passInfos[name] = PassInfo(description, create); } Pass* PassRegistry::createPass(std::string name) { - Creator creator = passCreatorMap[name]; - if (!creator) return nullptr; - return creator(); + if (passInfos.find(name) == passInfos.end()) return nullptr; + return passInfos[name].create(); } std::vector<std::string> PassRegistry::getRegisteredNames() { std::vector<std::string> ret; - for (auto pair : passCreatorMap) { + for (auto pair : passInfos) { ret.push_back(pair.first); } return ret; } +std::string PassRegistry::getPassDescription(std::string name) { + assert(passInfos.find(name) != passInfos.end()); + return passInfos[name].description; +} + // PassRunner void PassRunner::add(std::string passName) { diff --git a/src/pass.h b/src/pass.h index 638052c70..de22e7daa 100644 --- a/src/pass.h +++ b/src/pass.h @@ -16,12 +16,19 @@ struct PassRegistry { typedef std::function<Pass* ()> Creator; - void registerPass(const char* name, Creator create); + void registerPass(const char* name, const char *description, Creator create); Pass* createPass(std::string name); std::vector<std::string> getRegisteredNames(); + std::string getPassDescription(std::string name); private: - std::map<std::string, Creator> passCreatorMap; + struct PassInfo { + std::string description; + Creator create; + PassInfo() {} + PassInfo(std::string description, Creator create) : description(description), create(create) {} + }; + std::map<std::string, PassInfo> passInfos; }; // @@ -29,8 +36,8 @@ private: // template<class P> struct RegisterPass { - RegisterPass() { - PassRegistry::get()->registerPass(P().name, []() { + RegisterPass(const char* name, const char *description) { + PassRegistry::get()->registerPass(name, description, []() { return new P(); }); } @@ -64,10 +71,6 @@ struct PassRunner { // Core pass class // struct Pass : public WasmWalker { - const char* name; - - Pass(const char* name) : name(name) {} - // Override this to perform preparation work before the pass runs virtual void prepare(PassRunner* runner, Module *module) {} @@ -83,8 +86,6 @@ struct Pass : public WasmWalker { // Handles names in a module, in particular adding names without duplicates struct NameManager : public Pass { - NameManager() : Pass("name-manager") {} - Name getUnique(std::string prefix); // TODO: getUniqueInFunction diff --git a/src/passes/LowerIfElse.cpp b/src/passes/LowerIfElse.cpp index ff84c6844..1b8376ea4 100644 --- a/src/passes/LowerIfElse.cpp +++ b/src/passes/LowerIfElse.cpp @@ -17,8 +17,6 @@ namespace wasm { struct LowerIfElse : public Pass { - LowerIfElse() : Pass("lower-if-else") {} - MixedArena* allocator; std::unique_ptr<NameManager> namer; @@ -45,7 +43,7 @@ struct LowerIfElse : public Pass { } }; -static RegisterPass<LowerIfElse> registerPass; +static RegisterPass<LowerIfElse> registerPass("lower-if-else", "lowers if-elses into ifs, blocks and branches"); } // namespace wasm diff --git a/src/passes/NameManager.cpp b/src/passes/NameManager.cpp index 13a6dd9f9..73a09262b 100644 --- a/src/passes/NameManager.cpp +++ b/src/passes/NameManager.cpp @@ -62,7 +62,7 @@ void NameManager::visitExport(Export* curr) { names.insert(curr->name); } -static RegisterPass<NameManager> registerPass; +static RegisterPass<NameManager> registerPass("name-manager", "utility pass to manage names in modules"); } // namespace wasm |