diff options
author | Alex Beregszaszi <alex@rtfs.hu> | 2018-11-23 19:23:27 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-11-23 19:23:27 +0800 |
commit | 616ef8bca8515d565cd9ce24329056c0828e6853 (patch) | |
tree | 03a8798bca8f2ef221d77fc8a4c6c5390105800c /libsolidity/interface/StandardCompiler.cpp | |
parent | 9217fbb58d085325ce37ed6ca37f76e8b8de9d90 (diff) | |
parent | 0ff4cbe51ba653397a1937c8c08b3d09541492ef (diff) | |
download | dexon-solidity-616ef8bca8515d565cd9ce24329056c0828e6853.tar dexon-solidity-616ef8bca8515d565cd9ce24329056c0828e6853.tar.gz dexon-solidity-616ef8bca8515d565cd9ce24329056c0828e6853.tar.bz2 dexon-solidity-616ef8bca8515d565cd9ce24329056c0828e6853.tar.lz dexon-solidity-616ef8bca8515d565cd9ce24329056c0828e6853.tar.xz dexon-solidity-616ef8bca8515d565cd9ce24329056c0828e6853.tar.zst dexon-solidity-616ef8bca8515d565cd9ce24329056c0828e6853.zip |
Merge pull request #3073 from ethereum/smtlib2_via_standardio
Inject SMTLIB2 queries and responses via standard-json-io.
Diffstat (limited to 'libsolidity/interface/StandardCompiler.cpp')
-rw-r--r-- | libsolidity/interface/StandardCompiler.cpp | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/libsolidity/interface/StandardCompiler.cpp b/libsolidity/interface/StandardCompiler.cpp index 291a1071..bf33b789 100644 --- a/libsolidity/interface/StandardCompiler.cpp +++ b/libsolidity/interface/StandardCompiler.cpp @@ -319,6 +319,27 @@ Json::Value StandardCompiler::compileInternal(Json::Value const& _input) return formatFatalError("JSONError", "Invalid input source specified."); } + Json::Value const& auxInputs = _input["auxiliaryInput"]; + if (!!auxInputs) + { + Json::Value const& smtlib2Responses = auxInputs["smtlib2responses"]; + if (!!smtlib2Responses) + for (auto const& hashString: smtlib2Responses.getMemberNames()) + { + h256 hash; + try + { + hash = h256(hashString); + } + catch (dev::BadHexCharacter const&) + { + return formatFatalError("JSONError", "Invalid hex encoding of SMTLib2 auxiliary input."); + } + + m_compilerStack.addSMTLib2Response(hash, smtlib2Responses[hashString].asString()); + } + } + Json::Value const& settings = _input.get("settings", Json::Value()); if (settings.isMember("evmVersion")) @@ -518,6 +539,10 @@ Json::Value StandardCompiler::compileInternal(Json::Value const& _input) if (errors.size() > 0) output["errors"] = errors; + if (!m_compilerStack.unhandledSMTLib2Queries().empty()) + for (string const& query: m_compilerStack.unhandledSMTLib2Queries()) + output["auxiliaryInputRequested"]["smtlib2queries"]["0x" + keccak256(query).hex()] = query; + output["sources"] = Json::objectValue; unsigned sourceIndex = 0; for (string const& sourceName: analysisSuccess ? m_compilerStack.sourceNames() : vector<string>()) |