summaryrefslogtreecommitdiff
path: root/src/tools/wasm-opt.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/wasm-opt.cpp')
-rw-r--r--src/tools/wasm-opt.cpp31
1 files changed, 20 insertions, 11 deletions
diff --git a/src/tools/wasm-opt.cpp b/src/tools/wasm-opt.cpp
index 1da038b8e..93d8f5baa 100644
--- a/src/tools/wasm-opt.cpp
+++ b/src/tools/wasm-opt.cpp
@@ -27,6 +27,7 @@
#include "wasm-printing.h"
#include "wasm-s-parser.h"
#include "wasm-validator.h"
+#include "wasm-io.h"
using namespace wasm;
@@ -39,6 +40,7 @@ int main(int argc, const char* argv[]) {
std::vector<std::string> passes;
bool runOptimizationPasses = false;
PassOptions passOptions;
+ bool emitBinary = true;
Options options("wasm-opt", "Optimize .wast files");
options
@@ -49,6 +51,9 @@ int main(int argc, const char* argv[]) {
Colors::disable();
})
#include "optimization-options.h"
+ .add("--emit-text", "-S", "Emit text instead of binary for the output file",
+ Options::Arguments::Zero,
+ [&](Options *o, const std::string &argument) { emitBinary = false; })
.add_positional("INFILE", Options::Arguments::One,
[](Options* o, const std::string& argument) {
o->extra["infile"] = argument;
@@ -71,15 +76,17 @@ int main(int argc, const char* argv[]) {
Module wasm;
- try {
- if (options.debug) std::cerr << "s-parsing..." << std::endl;
- SExpressionParser parser(const_cast<char*>(input.c_str()));
- Element& root = *parser.root;
- if (options.debug) std::cerr << "w-parsing..." << std::endl;
- SExpressionWasmBuilder builder(wasm, *root[0]);
- } catch (ParseException& p) {
- p.dump(std::cerr);
- Fatal() << "error in parsing input";
+ {
+ if (options.debug) std::cerr << "reading...\n";
+ ModuleReader reader;
+ reader.setDebug(options.debug);
+
+ try {
+ reader.read(options.extra["infile"], wasm);
+ } catch (ParseException& p) {
+ p.dump(std::cerr);
+ Fatal() << "error in parsing input";
+ }
}
if (!WasmValidator().validate(wasm)) {
@@ -103,7 +110,9 @@ int main(int argc, const char* argv[]) {
if (options.extra.count("output") > 0) {
if (options.debug) std::cerr << "writing..." << std::endl;
- Output output(options.extra["output"], Flags::Text, options.debug ? Flags::Debug : Flags::Release);
- WasmPrinter::printModule(&wasm, output.getStream());
+ ModuleWriter writer;
+ writer.setDebug(options.debug);
+ writer.setBinary(emitBinary);
+ writer.write(wasm, options.extra["output"]);
}
}