summaryrefslogtreecommitdiff
path: root/src/pass.h
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2016-02-17 12:44:14 -0800
committerAlon Zakai <alonzakai@gmail.com>2016-02-17 14:25:01 -0800
commitdbb5f32bafcf3c8f51eefb95e6c298ce6b9ac8cc (patch)
tree88a9617fb2ad21c329043f1f4efd72a0abbb29dc /src/pass.h
parent252962faba97b68684a470447c7202cf27ad8c05 (diff)
downloadbinaryen-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.h34
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