diff options
Diffstat (limited to 'src/tools/asm2wasm.cpp')
-rw-r--r-- | src/tools/asm2wasm.cpp | 28 |
1 files changed, 13 insertions, 15 deletions
diff --git a/src/tools/asm2wasm.cpp b/src/tools/asm2wasm.cpp index cbc3c486b..3ce140b04 100644 --- a/src/tools/asm2wasm.cpp +++ b/src/tools/asm2wasm.cpp @@ -18,6 +18,8 @@ // asm2wasm console tool // +#include <exception> + #include "ast/trapping.h" #include "support/colors.h" #include "support/command-line.h" @@ -78,21 +80,17 @@ int main(int argc, const char *argv[]) { [](Options *o, const std::string &) { std::cerr << "--no-opts is deprecated (use -O0, etc.)\n"; }) - .add("--emit-potential-traps", "-i", "Emit instructions that might trap, like div/rem of 0", Options::Arguments::Zero, - [&trapMode](Options *o, const std::string &) { - trapMode = TrapMode::Allow; - }) - .add("--emit-clamped-potential-traps", "-i", "Clamp instructions that might trap, like float => int", Options::Arguments::Zero, - [&trapMode](Options *o, const std::string &) { - trapMode = TrapMode::Clamp; - }) - .add("--emit-jsified-potential-traps", "-i", "Avoid instructions that might trap, handling them exactly like JS would", Options::Arguments::Zero, - [&trapMode](Options *o, const std::string &) { - trapMode = TrapMode::JS; - }) - .add("--imprecise", "-i", "Imprecise optimizations (old name for --emit-potential-traps)", Options::Arguments::Zero, - [&trapMode](Options *o, const std::string &) { - trapMode = TrapMode::Allow; + .add("--trap-mode", "", + "Strategy for handling potentially trapping instructions. Valid " + "values are \"allow\", \"js\", and \"clamp\"", + Options::Arguments::One, + [&trapMode](Options *o, const std::string &argument) { + try { + trapMode = trapModeFromString(argument); + } catch (std::invalid_argument e) { + std::cerr << "Error: " << e.what() << "\n"; + exit(EXIT_FAILURE); + } }) .add("--wasm-only", "-w", "Input is in WebAssembly-only format, and not actually valid asm.js", Options::Arguments::Zero, [&wasmOnly](Options *o, const std::string &) { |