From 5e507aa909e5ff876cd03987b7e695f69793b348 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20=C5=9Aliwak?= Date: Fri, 21 Apr 2023 21:48:47 +0200 Subject: [PATCH] fixup! [libevmasm] Add support to import evm assembly json. --- libevmasm/EVMAssemblyStack.cpp | 18 +++++++++++------- libevmasm/EVMAssemblyStack.h | 16 +++++----------- libsolidity/interface/CompilerStack.h | 2 +- solc/CommandLineInterface.cpp | 5 +++-- 4 files changed, 20 insertions(+), 21 deletions(-) diff --git a/libevmasm/EVMAssemblyStack.cpp b/libevmasm/EVMAssemblyStack.cpp index f81e535a9..dc0a0b273 100644 --- a/libevmasm/EVMAssemblyStack.cpp +++ b/libevmasm/EVMAssemblyStack.cpp @@ -32,20 +32,24 @@ using namespace std; namespace solidity::evmasm { -bool EVMAssemblyStack::parseAndAnalyze(std::string const& _sourceName, std::string const& _source) +bool EVMAssemblyStack::parseAndAnalyze(string const& _sourceName, string const& _source) { + solAssert(!m_evmAssembly); + m_name = _sourceName; - if (jsonParseStrict(_source, m_json)) - { - m_evmAssembly = evmasm::Assembly::fromJSON(m_json); - return m_evmAssembly != nullptr; - } - return false; + if (!jsonParseStrict(_source, m_json)) + return false; + + m_evmAssembly = evmasm::Assembly::fromJSON(m_json); + return m_evmAssembly != nullptr; } void EVMAssemblyStack::assemble() { solAssert(m_evmAssembly->isCreation()); + solAssert(m_evmAssembly); + solAssert(!m_evmRuntimeAssembly); + m_object = m_evmAssembly->assemble(); if (m_evmAssembly->numSubs() > 0) { diff --git a/libevmasm/EVMAssemblyStack.h b/libevmasm/EVMAssemblyStack.h index 104a978e1..dfd828857 100644 --- a/libevmasm/EVMAssemblyStack.h +++ b/libevmasm/EVMAssemblyStack.h @@ -18,13 +18,13 @@ #pragma once -#include -#include +#include +#include #include -#include -#include +#include +#include namespace solidity::evmasm { @@ -43,17 +43,11 @@ public: std::string const& name() const { return m_name; } evmasm::LinkerObject const& object() const { return m_object; } - - std::shared_ptr const& evmAssembly() const { return m_evmAssembly; } - evmasm::LinkerObject const& runtimeObject() const { return m_runtimeObject; } + std::shared_ptr const& evmAssembly() const { return m_evmAssembly; } std::shared_ptr const& evmRuntimeAssembly() const { return m_evmRuntimeAssembly; } - Json::Value json() const - { - return m_json; - } private: langutil::EVMVersion m_evmVersion; diff --git a/libsolidity/interface/CompilerStack.h b/libsolidity/interface/CompilerStack.h index cfb1cb405..70fb5d564 100644 --- a/libsolidity/interface/CompilerStack.h +++ b/libsolidity/interface/CompilerStack.h @@ -41,8 +41,8 @@ #include #include -#include #include +#include #include #include diff --git a/solc/CommandLineInterface.cpp b/solc/CommandLineInterface.cpp index 9718c1305..809c09fc8 100644 --- a/solc/CommandLineInterface.cpp +++ b/solc/CommandLineInterface.cpp @@ -730,12 +730,13 @@ void CommandLineInterface::printLicense() void CommandLineInterface::assembleFromEvmAssemblyJson() { solAssert(m_options.input.mode == InputMode::EVMAssemblerJSON); + solAssert(m_compiler == nullptr); try { solAssert(m_fileReader.sourceUnits().size() == 1); - auto const iter = m_fileReader.sourceUnits().begin(); + auto&& [sourceUnitName, source] = *m_fileReader.sourceUnits().begin(); m_compiler = make_unique(m_universalCallback.callback()); - m_compiler->importFromEVMAssemblyStack(iter->first, iter->second); + m_compiler->importFromEVMAssemblyStack(sourceUnitName, source); } catch (evmasm::AssemblyImportException const& _exception) {