diff options
author | Alon Zakai <alonzakai@gmail.com> | 2016-05-24 11:58:17 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2016-05-24 12:02:27 -0700 |
commit | 10d1257f6fa637415b4b4b1becb8055f3d9ea93d (patch) | |
tree | 4147d929900fac8519ff370df7faa014468e6472 /src | |
parent | 3a993f98daefc9a851824f5099b76b4a427f81ed (diff) | |
download | binaryen-10d1257f6fa637415b4b4b1becb8055f3d9ea93d.tar.gz binaryen-10d1257f6fa637415b4b4b1becb8055f3d9ea93d.tar.bz2 binaryen-10d1257f6fa637415b4b4b1becb8055f3d9ea93d.zip |
catch parse exceptions in s-parsing too
Diffstat (limited to 'src')
-rw-r--r-- | src/tools/binaryen-shell.cpp | 77 |
1 files changed, 39 insertions, 38 deletions
diff --git a/src/tools/binaryen-shell.cpp b/src/tools/binaryen-shell.cpp index 8f5fbe4e5..96f506934 100644 --- a/src/tools/binaryen-shell.cpp +++ b/src/tools/binaryen-shell.cpp @@ -198,50 +198,51 @@ int main(int argc, const char* argv[]) { auto input(read_file<std::vector<char>>(options.extra["infile"], Flags::Text, options.debug ? Flags::Debug : Flags::Release)); - if (options.debug) std::cerr << "parsing text to s-expressions...\n"; - SExpressionParser parser(input.data()); - Element& root = *parser.root; - - // A .wast may have multiple modules, with some asserts after them bool checked = false; - size_t i = 0; - while (i < root.size()) { - Element& curr = *root[i]; - IString id = curr[0]->str(); - if (id == MODULE) { - if (options.debug) std::cerr << "parsing s-expressions to wasm...\n"; - Module wasm; - std::unique_ptr<SExpressionWasmBuilder> builder; - try { + + try { + if (options.debug) std::cerr << "parsing text to s-expressions...\n"; + SExpressionParser parser(input.data()); + Element& root = *parser.root; + + // A .wast may have multiple modules, with some asserts after them + size_t i = 0; + while (i < root.size()) { + Element& curr = *root[i]; + IString id = curr[0]->str(); + if (id == MODULE) { + if (options.debug) std::cerr << "parsing s-expressions to wasm...\n"; + Module wasm; + std::unique_ptr<SExpressionWasmBuilder> builder; builder = make_unique<SExpressionWasmBuilder>(wasm, *root[i]); - } catch (ParseException& p) { - p.dump(std::cerr); - abort(); - } - i++; - assert(WasmValidator().validate(wasm)); - - MixedArena moreModuleAllocations; - - if (passes.size() > 0) { - if (options.debug) std::cerr << "running passes...\n"; - PassRunner passRunner(&wasm); - if (options.debug) passRunner.setDebug(true); - for (auto& passName : passes) { - if (passName == "O") { - passRunner.addDefaultOptimizationPasses(); - } else { - passRunner.add(passName); + i++; + assert(WasmValidator().validate(wasm)); + + MixedArena moreModuleAllocations; + + if (passes.size() > 0) { + if (options.debug) std::cerr << "running passes...\n"; + PassRunner passRunner(&wasm); + if (options.debug) passRunner.setDebug(true); + for (auto& passName : passes) { + if (passName == "O") { + passRunner.addDefaultOptimizationPasses(); + } else { + passRunner.add(passName); + } } + passRunner.run(); + assert(WasmValidator().validate(wasm)); } - passRunner.run(); - assert(WasmValidator().validate(wasm)); - } - run_asserts(&i, &checked, &wasm, &root, &builder, entry); - } else { - run_asserts(&i, &checked, nullptr, &root, nullptr, entry); + run_asserts(&i, &checked, &wasm, &root, &builder, entry); + } else { + run_asserts(&i, &checked, nullptr, &root, nullptr, entry); + } } + } catch (ParseException& p) { + p.dump(std::cerr); + abort(); } if (checked) { |