mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Cache metadata and allow after analysis in CompilerStack
This commit is contained in:
committed by
chriseth
parent
5a47f3e005
commit
26ca144647
@@ -631,10 +631,24 @@ Json::Value CompilerStack::methodIdentifiers(string const& _contractName) const
|
||||
|
||||
string const& CompilerStack::metadata(string const& _contractName) const
|
||||
{
|
||||
if (m_stackState != CompilationSuccessful)
|
||||
BOOST_THROW_EXCEPTION(CompilerError() << errinfo_comment("Compilation was not successful."));
|
||||
if (m_stackState < AnalysisSuccessful)
|
||||
BOOST_THROW_EXCEPTION(CompilerError() << errinfo_comment("Analysis was not successful."));
|
||||
|
||||
return contract(_contractName).metadata;
|
||||
return metadata(contract(_contractName));
|
||||
}
|
||||
|
||||
string const& CompilerStack::metadata(Contract const& _contract) const
|
||||
{
|
||||
if (m_stackState < AnalysisSuccessful)
|
||||
BOOST_THROW_EXCEPTION(CompilerError() << errinfo_comment("Analysis was not successful."));
|
||||
|
||||
solAssert(_contract.contract, "");
|
||||
|
||||
// cache the result
|
||||
if (!_contract.metadata)
|
||||
_contract.metadata.reset(new string(createMetadata(_contract)));
|
||||
|
||||
return *_contract.metadata;
|
||||
}
|
||||
|
||||
Scanner const& CompilerStack::scanner(string const& _sourceName) const
|
||||
@@ -848,11 +862,8 @@ void CompilerStack::compileContract(
|
||||
shared_ptr<Compiler> compiler = make_shared<Compiler>(m_evmVersion, m_optimiserSettings);
|
||||
compiledContract.compiler = compiler;
|
||||
|
||||
string metadata = createMetadata(compiledContract);
|
||||
compiledContract.metadata = metadata;
|
||||
|
||||
bytes cborEncodedMetadata = createCBORMetadata(
|
||||
metadata,
|
||||
metadata(compiledContract),
|
||||
!onlySafeExperimentalFeaturesActivated(_contract.sourceUnit().annotation().experimentalFeatures)
|
||||
);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user