aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Beregszaszi <alex@rtfs.hu>2017-05-03 01:55:39 +0800
committerAlex Beregszaszi <alex@rtfs.hu>2017-05-06 17:43:58 +0800
commita95c86e8e4b328e1fe4aad742d7d700326c6c283 (patch)
tree0a228310152ffb61f605fa4e11b6dbd6cd987be0
parentc09f071ff693f52a2a1434cfd6963b2d1818776e (diff)
downloaddexon-solidity-a95c86e8e4b328e1fe4aad742d7d700326c6c283.tar.gz
dexon-solidity-a95c86e8e4b328e1fe4aad742d7d700326c6c283.tar.zst
dexon-solidity-a95c86e8e4b328e1fe4aad742d7d700326c6c283.zip
Catch errors gracefully in CLI assembler
-rw-r--r--solc/CommandLineInterface.cpp27
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)
{