mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
fixup! [libevmasm] Add support to import evm assembly json.
This commit is contained in:
parent
d413a0739a
commit
72caea92e6
@ -32,20 +32,24 @@ using namespace std;
|
|||||||
namespace solidity::evmasm
|
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;
|
m_name = _sourceName;
|
||||||
if (jsonParseStrict(_source, m_json))
|
if (!jsonParseStrict(_source, m_json))
|
||||||
{
|
return false;
|
||||||
m_evmAssembly = evmasm::Assembly::fromJSON(m_json);
|
|
||||||
return m_evmAssembly != nullptr;
|
m_evmAssembly = evmasm::Assembly::fromJSON(m_json);
|
||||||
}
|
return m_evmAssembly != nullptr;
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void EVMAssemblyStack::assemble()
|
void EVMAssemblyStack::assemble()
|
||||||
{
|
{
|
||||||
solAssert(m_evmAssembly->isCreation());
|
solAssert(m_evmAssembly->isCreation());
|
||||||
|
solAssert(m_evmAssembly);
|
||||||
|
solAssert(!m_evmRuntimeAssembly);
|
||||||
|
|
||||||
m_object = m_evmAssembly->assemble();
|
m_object = m_evmAssembly->assemble();
|
||||||
if (m_evmAssembly->numSubs() > 0)
|
if (m_evmAssembly->numSubs() > 0)
|
||||||
{
|
{
|
||||||
|
@ -18,13 +18,13 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <map>
|
#include <libevmasm/Assembly.h>
|
||||||
#include <string>
|
#include <libevmasm/LinkerObject.h>
|
||||||
|
|
||||||
#include <libsolutil/JSON.h>
|
#include <libsolutil/JSON.h>
|
||||||
|
|
||||||
#include <libevmasm/Assembly.h>
|
#include <map>
|
||||||
#include <libevmasm/LinkerObject.h>
|
#include <string>
|
||||||
|
|
||||||
namespace solidity::evmasm
|
namespace solidity::evmasm
|
||||||
{
|
{
|
||||||
@ -43,17 +43,11 @@ public:
|
|||||||
std::string const& name() const { return m_name; }
|
std::string const& name() const { return m_name; }
|
||||||
|
|
||||||
evmasm::LinkerObject const& object() const { return m_object; }
|
evmasm::LinkerObject const& object() const { return m_object; }
|
||||||
|
|
||||||
std::shared_ptr<evmasm::Assembly> const& evmAssembly() const { return m_evmAssembly; }
|
|
||||||
|
|
||||||
evmasm::LinkerObject const& runtimeObject() const { return m_runtimeObject; }
|
evmasm::LinkerObject const& runtimeObject() const { return m_runtimeObject; }
|
||||||
|
|
||||||
|
std::shared_ptr<evmasm::Assembly> const& evmAssembly() const { return m_evmAssembly; }
|
||||||
std::shared_ptr<evmasm::Assembly> const& evmRuntimeAssembly() const { return m_evmRuntimeAssembly; }
|
std::shared_ptr<evmasm::Assembly> const& evmRuntimeAssembly() const { return m_evmRuntimeAssembly; }
|
||||||
|
|
||||||
Json::Value json() const
|
|
||||||
{
|
|
||||||
return m_json;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
langutil::EVMVersion m_evmVersion;
|
langutil::EVMVersion m_evmVersion;
|
||||||
|
@ -41,8 +41,8 @@
|
|||||||
#include <liblangutil/EVMVersion.h>
|
#include <liblangutil/EVMVersion.h>
|
||||||
#include <liblangutil/SourceLocation.h>
|
#include <liblangutil/SourceLocation.h>
|
||||||
|
|
||||||
#include <libevmasm/LinkerObject.h>
|
|
||||||
#include <libevmasm/EVMAssemblyStack.h>
|
#include <libevmasm/EVMAssemblyStack.h>
|
||||||
|
#include <libevmasm/LinkerObject.h>
|
||||||
|
|
||||||
#include <libsolutil/Common.h>
|
#include <libsolutil/Common.h>
|
||||||
#include <libsolutil/FixedHash.h>
|
#include <libsolutil/FixedHash.h>
|
||||||
|
@ -760,12 +760,13 @@ void CommandLineInterface::printLicense()
|
|||||||
void CommandLineInterface::assembleFromEvmAssemblyJson()
|
void CommandLineInterface::assembleFromEvmAssemblyJson()
|
||||||
{
|
{
|
||||||
solAssert(m_options.input.mode == InputMode::EVMAssemblerJSON);
|
solAssert(m_options.input.mode == InputMode::EVMAssemblerJSON);
|
||||||
|
solAssert(m_compiler == nullptr);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
solAssert(m_fileReader.sourceUnits().size() == 1);
|
solAssert(m_fileReader.sourceUnits().size() == 1);
|
||||||
auto const iter = m_fileReader.sourceUnits().begin();
|
auto&& [sourceUnitName, source] = *m_fileReader.sourceUnits().begin();
|
||||||
m_compiler = make_unique<CompilerStack>(m_universalCallback.callback());
|
m_compiler = make_unique<CompilerStack>(m_universalCallback.callback());
|
||||||
m_compiler->importFromEVMAssemblyStack(iter->first, iter->second);
|
m_compiler->importFromEVMAssemblyStack(sourceUnitName, source);
|
||||||
}
|
}
|
||||||
catch (evmasm::AssemblyImportException const& _exception)
|
catch (evmasm::AssemblyImportException const& _exception)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user