diff options
author | Alex Beregszaszi <alex@rtfs.hu> | 2017-05-03 01:55:39 +0800 |
---|---|---|
committer | Alex Beregszaszi <alex@rtfs.hu> | 2017-05-06 17:43:58 +0800 |
commit | a95c86e8e4b328e1fe4aad742d7d700326c6c283 (patch) | |
tree | 0a228310152ffb61f605fa4e11b6dbd6cd987be0 | |
parent | c09f071ff693f52a2a1434cfd6963b2d1818776e (diff) | |
download | dexon-solidity-a95c86e8e4b328e1fe4aad742d7d700326c6c283.tar.gz dexon-solidity-a95c86e8e4b328e1fe4aad742d7d700326c6c283.tar.zst dexon-solidity-a95c86e8e4b328e1fe4aad742d7d700326c6c283.zip |
Catch errors gracefully in CLI assembler
-rw-r--r-- | solc/CommandLineInterface.cpp | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/solc/CommandLineInterface.cpp b/solc/CommandLineInterface.cpp index 63d41cdf..0f2e83dc 100644 --- a/solc/CommandLineInterface.cpp +++ b/solc/CommandLineInterface.cpp @@ -985,13 +985,26 @@ bool CommandLineInterface::assemble() map<string, shared_ptr<Scanner>> scanners; for (auto const& src: m_sourceCodes) { - auto scanner = make_shared<Scanner>(CharStream(src.second), src.first); - scanners[src.first] = scanner; - if (!m_assemblyStacks[src.first].parse(scanner)) - successful = false; - else - //@TODO we should not just throw away the result here - m_assemblyStacks[src.first].assemble(); + try + { + auto scanner = make_shared<Scanner>(CharStream(src.second), src.first); + scanners[src.first] = scanner; + if (!m_assemblyStacks[src.first].parse(scanner)) + successful = false; + else + //@TODO we should not just throw away the result here + m_assemblyStacks[src.first].assemble(); + } + catch (Exception const& _exception) + { + cerr << "Exception in assembler: " << boost::diagnostic_information(_exception) << endl; + return false; + } + catch (...) + { + cerr << "Unknown exception in assembler." << endl; + return false; + } } for (auto const& stack: m_assemblyStacks) { |