summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyoga <ryoga_314@yahoo.co.jp>2019-07-10 06:50:06 +0900
committerAlon Zakai <azakai@google.com>2019-07-09 14:50:06 -0700
commit03a883356bd3aba53b2dfadb424d53b1db04a842 (patch)
tree231b80cef3aac200bfaec9765c705db4ee04f0a4
parentcbca5a29865e93ba543d1ede1b13bcc8f32bc1fd (diff)
downloadbinaryen-03a883356bd3aba53b2dfadb424d53b1db04a842.tar.gz
binaryen-03a883356bd3aba53b2dfadb424d53b1db04a842.tar.bz2
binaryen-03a883356bd3aba53b2dfadb424d53b1db04a842.zip
Allows multiple arguments to be passed to PassRunner::add<T>() (#2208)
struct FooPass : public wasm::Pass { FooPass(int a, int b); }; PassRunner runner {module}; runner.add<FooPass>(1, 2); // To allow this This change avoids unnecessary copying and allows us to pass the reference without reference_wrapper. struct BarPass : public wasm::Pass { BarPass(std::ostream& s); }; runner.add<BarPass>(std::cout); // Error (cout is uncopyable) runner.add<BarPass>(std::ref(std::cout)); // OK ↓ runner.add<BarPass>(std::cout); // OK (passed by reference) runner.add<BarPass>(std::ref(std::cout)); // OK
-rw-r--r--src/pass.h6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/pass.h b/src/pass.h
index 0a9cc251f..5c1315844 100644
--- a/src/pass.h
+++ b/src/pass.h
@@ -171,9 +171,9 @@ struct PassRunner {
doAdd(pass);
}
- template<class P> void add() { doAdd(new P()); }
-
- template<class P, class Arg> void add(Arg arg) { doAdd(new P(arg)); }
+ template<class P, class... Args> void add(Args&&... args) {
+ doAdd(new P(std::forward<Args>(args)...));
+ }
// Adds the default set of optimization passes; this is
// what -O does.