aboutsummaryrefslogtreecommitdiffstats
path: root/libsolidity/interface/StandardCompiler.cpp
diff options
context:
space:
mode:
authorchriseth <chris@ethereum.org>2017-07-03 19:23:28 +0800
committerGitHub <noreply@github.com>2017-07-03 19:23:28 +0800
commit2b233e73889d047a036227a22e60a4d32e837d43 (patch)
tree984ecac8318de86b484cec34a79289b0e915a44d /libsolidity/interface/StandardCompiler.cpp
parentaa262d5c8febadd067539c1e05232b1b8c91b4f5 (diff)
parent75c193e9595c290967d14a5e203f0a6192c10aa2 (diff)
downloaddexon-solidity-2b233e73889d047a036227a22e60a4d32e837d43.tar
dexon-solidity-2b233e73889d047a036227a22e60a4d32e837d43.tar.gz
dexon-solidity-2b233e73889d047a036227a22e60a4d32e837d43.tar.bz2
dexon-solidity-2b233e73889d047a036227a22e60a4d32e837d43.tar.lz
dexon-solidity-2b233e73889d047a036227a22e60a4d32e837d43.tar.xz
dexon-solidity-2b233e73889d047a036227a22e60a4d32e837d43.tar.zst
dexon-solidity-2b233e73889d047a036227a22e60a4d32e837d43.zip
Merge pull request #2507 from ethereum/jsonio-safe
Handle parsing errors in StandardCompiler
Diffstat (limited to 'libsolidity/interface/StandardCompiler.cpp')
-rw-r--r--libsolidity/interface/StandardCompiler.cpp13
1 files changed, 7 insertions, 6 deletions
diff --git a/libsolidity/interface/StandardCompiler.cpp b/libsolidity/interface/StandardCompiler.cpp
index 2e5005b8..e677afc8 100644
--- a/libsolidity/interface/StandardCompiler.cpp
+++ b/libsolidity/interface/StandardCompiler.cpp
@@ -265,11 +265,9 @@ Json::Value StandardCompiler::compileInternal(Json::Value const& _input)
auto scannerFromSourceName = [&](string const& _sourceName) -> solidity::Scanner const& { return m_compilerStack.scanner(_sourceName); };
- bool success = false;
-
try
{
- success = m_compilerStack.compile(optimize, optimizeRuns, libraries);
+ m_compilerStack.compile(optimize, optimizeRuns, libraries);
for (auto const& error: m_compilerStack.errors())
{
@@ -359,13 +357,16 @@ Json::Value StandardCompiler::compileInternal(Json::Value const& _input)
if (errors.size() > 0)
output["errors"] = errors;
+ bool parsingSuccess = m_compilerStack.state() >= CompilerStack::State::ParsingSuccessful;
+ bool compilationSuccess = m_compilerStack.state() == CompilerStack::State::CompilationSuccessful;
+
/// Inconsistent state - stop here to receive error reports from users
- if (!success && (errors.size() == 0))
+ if (!compilationSuccess && (errors.size() == 0))
return formatFatalError("InternalCompilerError", "No error reported, but compilation failed.");
output["sources"] = Json::objectValue;
unsigned sourceIndex = 0;
- for (auto const& source: m_compilerStack.sourceNames())
+ for (auto const& source: parsingSuccess ? m_compilerStack.sourceNames() : vector<string>())
{
Json::Value sourceResult = Json::objectValue;
sourceResult["id"] = sourceIndex++;
@@ -375,7 +376,7 @@ Json::Value StandardCompiler::compileInternal(Json::Value const& _input)
}
Json::Value contractsOutput = Json::objectValue;
- for (string const& contractName: success ? m_compilerStack.contractNames() : vector<string>())
+ for (string const& contractName: compilationSuccess ? m_compilerStack.contractNames() : vector<string>())
{
size_t colon = contractName.find(':');
solAssert(colon != string::npos, "");