Skip to content

Commit cb41cb1

Browse files
committed
CompilerStack: Expose contracts per source unit
1 parent f82fa87 commit cb41cb1

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed

Diff for: libsolidity/interface/CompilerStack.cpp

+12
Original file line numberDiff line numberDiff line change
@@ -1256,6 +1256,18 @@ ContractDefinition const& CompilerStack::contractDefinition(std::string const& _
12561256
return *contract(_contractName).contract;
12571257
}
12581258

1259+
std::vector<ContractDefinition const*> CompilerStack::contractDefinitions(
1260+
std::string const& _sourceName
1261+
) const
1262+
{
1263+
std::vector<ContractDefinition const*> contracts;
1264+
if (auto source = m_sources.find(_sourceName); source != m_sources.end())
1265+
for (auto const* contract: ASTNode::filteredNodes<ContractDefinition>(source->second.ast->nodes()))
1266+
contracts.emplace_back(contract);
1267+
1268+
return contracts;
1269+
}
1270+
12591271
size_t CompilerStack::functionEntryPoint(
12601272
std::string const& _contractName,
12611273
FunctionDefinition const& _function

Diff for: libsolidity/interface/CompilerStack.h

+3
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,9 @@ class CompilerStack: public langutil::CharStreamProvider, public evmasm::Abstrac
307307
/// does not exist.
308308
ContractDefinition const& contractDefinition(std::string const& _contractName) const;
309309

310+
/// @returns a list of parsed contracts per source unit with the supplied name.
311+
std::vector<ContractDefinition const*> contractDefinitions(std::string const& _sourceName) const;
312+
310313
/// @returns a list of unhandled queries to the SMT solver (has to be supplied in a second run
311314
/// by calling @a addSMTLib2Response).
312315
std::vector<std::string> const& unhandledSMTLib2Queries() const { return m_unhandledSMTLib2Queries; }

0 commit comments

Comments
 (0)