mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Provide optional list of contract names to CompilerStack.compile
This commit is contained in:
parent
19274c7890
commit
f96e932243
@ -252,6 +252,14 @@ bool CompilerStack::parseAndAnalyze()
|
|||||||
return parse() && analyze();
|
return parse() && analyze();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CompilerStack::isRequestedContract(ContractDefinition const& _contract) const
|
||||||
|
{
|
||||||
|
return
|
||||||
|
m_requestedContractNames.empty() ||
|
||||||
|
m_requestedContractNames.count(_contract.fullyQualifiedName()) ||
|
||||||
|
m_requestedContractNames.count(_contract.name());
|
||||||
|
}
|
||||||
|
|
||||||
bool CompilerStack::compile()
|
bool CompilerStack::compile()
|
||||||
{
|
{
|
||||||
if (m_stackState < AnalysisSuccessful)
|
if (m_stackState < AnalysisSuccessful)
|
||||||
@ -262,7 +270,8 @@ bool CompilerStack::compile()
|
|||||||
for (Source const* source: m_sourceOrder)
|
for (Source const* source: m_sourceOrder)
|
||||||
for (ASTPointer<ASTNode> const& node: source->ast->nodes())
|
for (ASTPointer<ASTNode> const& node: source->ast->nodes())
|
||||||
if (auto contract = dynamic_cast<ContractDefinition const*>(node.get()))
|
if (auto contract = dynamic_cast<ContractDefinition const*>(node.get()))
|
||||||
compileContract(*contract, compiledContracts);
|
if (isRequestedContract(*contract))
|
||||||
|
compileContract(*contract, compiledContracts);
|
||||||
this->link();
|
this->link();
|
||||||
m_stackState = CompilationSuccessful;
|
m_stackState = CompilationSuccessful;
|
||||||
return true;
|
return true;
|
||||||
|
@ -116,6 +116,13 @@ public:
|
|||||||
m_optimizeRuns = _runs;
|
m_optimizeRuns = _runs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Sets the list of requested contract names. If empty, no filtering is performed and every contract
|
||||||
|
/// found in the supplied sources is compiled. Names are cleared iff @a _contractNames is missing.
|
||||||
|
void setRequestedContractNames(std::set<std::string> const& _contractNames = std::set<std::string>{})
|
||||||
|
{
|
||||||
|
m_requestedContractNames = _contractNames;
|
||||||
|
}
|
||||||
|
|
||||||
/// @arg _metadataLiteralSources When true, store sources as literals in the contract metadata.
|
/// @arg _metadataLiteralSources When true, store sources as literals in the contract metadata.
|
||||||
void useMetadataLiteralSources(bool _metadataLiteralSources) { m_metadataLiteralSources = _metadataLiteralSources; }
|
void useMetadataLiteralSources(bool _metadataLiteralSources) { m_metadataLiteralSources = _metadataLiteralSources; }
|
||||||
|
|
||||||
@ -259,6 +266,9 @@ private:
|
|||||||
/// Helper function to return path converted strings.
|
/// Helper function to return path converted strings.
|
||||||
std::string sanitizePath(std::string const& _path) const { return boost::filesystem::path(_path).generic_string(); }
|
std::string sanitizePath(std::string const& _path) const { return boost::filesystem::path(_path).generic_string(); }
|
||||||
|
|
||||||
|
/// @returns true if the contract is requested to be compiled.
|
||||||
|
bool isRequestedContract(ContractDefinition const& _contract) const;
|
||||||
|
|
||||||
/// Compile a single contract and put the result in @a _compiledContracts.
|
/// Compile a single contract and put the result in @a _compiledContracts.
|
||||||
void compileContract(
|
void compileContract(
|
||||||
ContractDefinition const& _contract,
|
ContractDefinition const& _contract,
|
||||||
@ -297,6 +307,7 @@ private:
|
|||||||
ReadCallback::Callback m_smtQuery;
|
ReadCallback::Callback m_smtQuery;
|
||||||
bool m_optimize = false;
|
bool m_optimize = false;
|
||||||
unsigned m_optimizeRuns = 200;
|
unsigned m_optimizeRuns = 200;
|
||||||
|
std::set<std::string> m_requestedContractNames;
|
||||||
std::map<std::string, h160> m_libraries;
|
std::map<std::string, h160> m_libraries;
|
||||||
/// list of path prefix remappings, e.g. mylibrary: github.com/ethereum = /usr/local/ethereum
|
/// list of path prefix remappings, e.g. mylibrary: github.com/ethereum = /usr/local/ethereum
|
||||||
/// "context:prefix=target"
|
/// "context:prefix=target"
|
||||||
|
Loading…
Reference in New Issue
Block a user