diff options
author | Alon Zakai <alonzakai@gmail.com> | 2016-02-17 12:44:14 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2016-02-17 14:25:01 -0800 |
commit | dbb5f32bafcf3c8f51eefb95e6c298ce6b9ac8cc (patch) | |
tree | 88a9617fb2ad21c329043f1f4efd72a0abbb29dc /src/pass.h | |
parent | 252962faba97b68684a470447c7202cf27ad8c05 (diff) | |
download | binaryen-dbb5f32bafcf3c8f51eefb95e6c298ce6b9ac8cc.tar.gz binaryen-dbb5f32bafcf3c8f51eefb95e6c298ce6b9ac8cc.tar.bz2 binaryen-dbb5f32bafcf3c8f51eefb95e6c298ce6b9ac8cc.zip |
move printing to a pass
Diffstat (limited to 'src/pass.h')
-rw-r--r-- | src/pass.h | 34 |
1 files changed, 32 insertions, 2 deletions
diff --git a/src/pass.h b/src/pass.h index a95be9850..250ba59b2 100644 --- a/src/pass.h +++ b/src/pass.h @@ -71,10 +71,21 @@ struct PassRunner { PassRunner(MixedArena* allocator) : allocator(allocator) {} - void add(std::string passName); + void add(std::string passName) { + auto pass = PassRegistry::get()->createPass(passName); + assert(pass); + passes.push_back(pass); + } template<class P> - void add(); + void add() { + passes.push_back(new P()); + } + + template<class P, class Arg> + void add(Arg& arg){ + passes.push_back(new P(arg)); + } void run(Module* module); @@ -143,6 +154,25 @@ private: size_t counter = 0; }; +// Prints out a module +class Printer : public Pass { + std::ostream& o; + +public: + Printer() : o(std::cout) {} + Printer(std::ostream& o) : o(o) {} + + void run(PassRunner* runner, Module* module) override; +}; + +// Standard pass utilities + +inline void printWasm(Module* module, std::ostream& o) { + PassRunner passRunner(nullptr); + passRunner.add<Printer>(o); + passRunner.run(module); +} + } // namespace wasm #endif // wasm_pass_h |