From c8222636469a626e37fc2c9b603ceb34e2c7adf2 Mon Sep 17 00:00:00 2001 From: Alexander Arlt Date: Tue, 9 Nov 2021 18:02:51 -0500 Subject: [PATCH] [libsolidity] srcmap sourceList handling corrections. --- libevmasm/Assembly.cpp | 8 -------- libsolidity/interface/CompilerStack.cpp | 9 +++++++-- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/libevmasm/Assembly.cpp b/libevmasm/Assembly.cpp index 15819805e..6b0c73fcb 100644 --- a/libevmasm/Assembly.cpp +++ b/libevmasm/Assembly.cpp @@ -523,14 +523,6 @@ bool Assembly::loadFromAssemblyJSON(Json::Value const& _json) if (!_json[".code"].isArray()) return false; bool result{true}; - if (_json.isMember("sourceList")) - { - vector sourceList; - for (auto const& it: _json["sourceList"]) - sourceList.emplace_back(it.asString()); - this->setSources(sourceList); - } - addAssemblyItemsFromJSON(_json[".code"]); if (_json[".auxdata"].isString()) this->m_auxiliaryData = fromHex(_json[".auxdata"].asString()); diff --git a/libsolidity/interface/CompilerStack.cpp b/libsolidity/interface/CompilerStack.cpp index c77a99e26..cd8a91472 100644 --- a/libsolidity/interface/CompilerStack.cpp +++ b/libsolidity/interface/CompilerStack.cpp @@ -398,7 +398,6 @@ void CompilerStack::importEvmAssemblyJson(map const& _sourc Json::Value jsonValue = _sources.begin()->second; if (jsonValue.isMember("sourceList")) - { for (auto const& item: jsonValue["sourceList"]) { Source source; @@ -406,7 +405,6 @@ void CompilerStack::importEvmAssemblyJson(map const& _sourc m_sources.emplace(std::make_pair(item.asString(), source)); m_sourceOrder.push_back(&m_sources[item.asString()]); } - } m_evmAssemblyJson[_sources.begin()->first] = jsonValue; m_importedSources = true; m_stackState = SourcesSet; @@ -687,12 +685,19 @@ bool CompilerStack::compile(State _stopAfter) optimiserSettings.runJumpdestRemover = m_optimiserSettings.runJumpdestRemover; optimiserSettings.runPeephole = m_optimiserSettings.runPeephole; + vector sourceList; + if (m_evmAssemblyJson[evmAssemblyJsonSource].isMember("sourceList")) + for (auto const& it: m_evmAssemblyJson[evmAssemblyJsonSource]["sourceList"]) + sourceList.emplace_back(it.asString()); + m_contracts[evmAssemblyJsonSource].evmAssembly = make_shared(evmAssemblyJsonSource); + m_contracts[evmAssemblyJsonSource].evmAssembly->setSources(sourceList); m_contracts[evmAssemblyJsonSource].evmAssembly->loadFromAssemblyJSON(m_evmAssemblyJson[evmAssemblyJsonSource]); m_contracts[evmAssemblyJsonSource].evmAssembly->optimise(optimiserSettings); m_contracts[evmAssemblyJsonSource].object = m_contracts[evmAssemblyJsonSource].evmAssembly->assemble(); m_contracts[evmAssemblyJsonSource].evmRuntimeAssembly = make_shared(evmAssemblyJsonSource); + m_contracts[evmAssemblyJsonSource].evmRuntimeAssembly->setSources(sourceList); m_contracts[evmAssemblyJsonSource].evmRuntimeAssembly->loadFromAssemblyJSON(m_evmAssemblyJson[evmAssemblyJsonSource][".data"]["0"]); m_contracts[evmAssemblyJsonSource].evmRuntimeAssembly->optimise(optimiserSettings); m_contracts[evmAssemblyJsonSource].runtimeObject = m_contracts[evmAssemblyJsonSource].evmRuntimeAssembly->assemble();