mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Add evmAssembly and evmRuntimeAssembly pointer in CompilerStack
This is a preparation for allowing those outputs to be served from the IR too
This commit is contained in:
parent
98d8174d31
commit
bcaefb57b8
@ -627,7 +627,7 @@ evmasm::AssemblyItems const* CompilerStack::assemblyItems(string const& _contrac
|
|||||||
BOOST_THROW_EXCEPTION(CompilerError() << errinfo_comment("Compilation was not successful."));
|
BOOST_THROW_EXCEPTION(CompilerError() << errinfo_comment("Compilation was not successful."));
|
||||||
|
|
||||||
Contract const& currentContract = contract(_contractName);
|
Contract const& currentContract = contract(_contractName);
|
||||||
return currentContract.compiler ? &contract(_contractName).compiler->assembly()->items() : nullptr;
|
return currentContract.evmAssembly ? ¤tContract.evmAssembly->items() : nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
evmasm::AssemblyItems const* CompilerStack::runtimeAssemblyItems(string const& _contractName) const
|
evmasm::AssemblyItems const* CompilerStack::runtimeAssemblyItems(string const& _contractName) const
|
||||||
@ -636,7 +636,7 @@ evmasm::AssemblyItems const* CompilerStack::runtimeAssemblyItems(string const& _
|
|||||||
BOOST_THROW_EXCEPTION(CompilerError() << errinfo_comment("Compilation was not successful."));
|
BOOST_THROW_EXCEPTION(CompilerError() << errinfo_comment("Compilation was not successful."));
|
||||||
|
|
||||||
Contract const& currentContract = contract(_contractName);
|
Contract const& currentContract = contract(_contractName);
|
||||||
return currentContract.compiler ? &contract(_contractName).compiler->runtimeAssembly()->items() : nullptr;
|
return currentContract.evmRuntimeAssembly ? ¤tContract.evmRuntimeAssembly->items() : nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
Json::Value CompilerStack::generatedSources(string const& _contractName, bool _runtime) const
|
Json::Value CompilerStack::generatedSources(string const& _contractName, bool _runtime) const
|
||||||
@ -790,8 +790,8 @@ string CompilerStack::assemblyString(string const& _contractName, StringMap _sou
|
|||||||
BOOST_THROW_EXCEPTION(CompilerError() << errinfo_comment("Compilation was not successful."));
|
BOOST_THROW_EXCEPTION(CompilerError() << errinfo_comment("Compilation was not successful."));
|
||||||
|
|
||||||
Contract const& currentContract = contract(_contractName);
|
Contract const& currentContract = contract(_contractName);
|
||||||
if (currentContract.compiler)
|
if (currentContract.evmAssembly)
|
||||||
return currentContract.compiler->assembly().assemblyString(_sourceCodes);
|
return currentContract.evmAssembly->assemblyString(_sourceCodes);
|
||||||
else
|
else
|
||||||
return string();
|
return string();
|
||||||
}
|
}
|
||||||
@ -803,8 +803,8 @@ Json::Value CompilerStack::assemblyJSON(string const& _contractName) const
|
|||||||
BOOST_THROW_EXCEPTION(CompilerError() << errinfo_comment("Compilation was not successful."));
|
BOOST_THROW_EXCEPTION(CompilerError() << errinfo_comment("Compilation was not successful."));
|
||||||
|
|
||||||
Contract const& currentContract = contract(_contractName);
|
Contract const& currentContract = contract(_contractName);
|
||||||
if (currentContract.compiler)
|
if (currentContract.evmAssembly)
|
||||||
return currentContract.compiler->assembly().assemblyJSON(sourceIndices());
|
return currentContract.evmAssembly->assemblyJSON(sourceIndices());
|
||||||
else
|
else
|
||||||
return Json::Value();
|
return Json::Value();
|
||||||
}
|
}
|
||||||
@ -1200,10 +1200,12 @@ void CompilerStack::compileContract(
|
|||||||
solAssert(false, "Optimizer exception during compilation");
|
solAssert(false, "Optimizer exception during compilation");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
compiledContract.evmAssembly = compiler->assemblyPtr();
|
||||||
|
solAssert(compiledContract.evmAssembly, "");
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Assemble deployment (incl. runtime) object.
|
// Assemble deployment (incl. runtime) object.
|
||||||
compiledContract.object = compiler->assembly().assemble();
|
compiledContract.object = compiledContract.evmAssembly->assemble();
|
||||||
}
|
}
|
||||||
catch(evmasm::AssemblyException const&)
|
catch(evmasm::AssemblyException const&)
|
||||||
{
|
{
|
||||||
@ -1211,10 +1213,12 @@ void CompilerStack::compileContract(
|
|||||||
}
|
}
|
||||||
solAssert(compiledContract.object.immutableReferences.empty(), "Leftover immutables.");
|
solAssert(compiledContract.object.immutableReferences.empty(), "Leftover immutables.");
|
||||||
|
|
||||||
|
compiledContract.evmRuntimeAssembly = compiler->runtimeAssemblyPtr();
|
||||||
|
solAssert(compiledContract.evmRuntimeAssembly, "");
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Assemble runtime object.
|
// Assemble runtime object.
|
||||||
compiledContract.runtimeObject = compiler->runtimeAssembly().assemble();
|
compiledContract.runtimeObject = compiledContract.evmRuntimeAssembly->assemble();
|
||||||
}
|
}
|
||||||
catch(evmasm::AssemblyException const&)
|
catch(evmasm::AssemblyException const&)
|
||||||
{
|
{
|
||||||
|
@ -358,6 +358,8 @@ private:
|
|||||||
{
|
{
|
||||||
ContractDefinition const* contract = nullptr;
|
ContractDefinition const* contract = nullptr;
|
||||||
std::shared_ptr<Compiler> compiler;
|
std::shared_ptr<Compiler> compiler;
|
||||||
|
std::shared_ptr<evmasm::Assembly> evmAssembly;
|
||||||
|
std::shared_ptr<evmasm::Assembly> evmRuntimeAssembly;
|
||||||
evmasm::LinkerObject object; ///< Deployment object (includes the runtime sub-object).
|
evmasm::LinkerObject object; ///< Deployment object (includes the runtime sub-object).
|
||||||
evmasm::LinkerObject runtimeObject; ///< Runtime object.
|
evmasm::LinkerObject runtimeObject; ///< Runtime object.
|
||||||
std::string yulIR; ///< Experimental Yul IR code.
|
std::string yulIR; ///< Experimental Yul IR code.
|
||||||
|
Loading…
Reference in New Issue
Block a user