Cache calls to `definedFunctions()`

This commit is contained in:
Mathias Baumann 2021-06-01 17:20:45 +02:00
parent 4df51020da
commit 444e844120
2 changed files with 10 additions and 1 deletions

View File

@ -149,6 +149,14 @@ FunctionDefinition const* ContractDefinition::receiveFunction() const
return nullptr;
}
std::vector<FunctionDefinition const*> const& ContractDefinition::definedFunctions() const
{
if (!m_cachedDefinedFunctions)
m_cachedDefinedFunctions = filteredNodes<FunctionDefinition>(m_subNodes);
return *m_cachedDefinedFunctions;
}
vector<EventDefinition const*> const& ContractDefinition::interfaceEvents() const
{
return m_interfaceEvents.init([&]{

View File

@ -496,7 +496,7 @@ public:
std::vector<EnumDefinition const*> definedEnums() const { return filteredNodes<EnumDefinition>(m_subNodes); }
std::vector<VariableDeclaration const*> stateVariables() const { return filteredNodes<VariableDeclaration>(m_subNodes); }
std::vector<ModifierDefinition const*> functionModifiers() const { return filteredNodes<ModifierDefinition>(m_subNodes); }
std::vector<FunctionDefinition const*> definedFunctions() const { return filteredNodes<FunctionDefinition>(m_subNodes); }
std::vector<FunctionDefinition const*> const& definedFunctions() const;
std::vector<EventDefinition const*> events() const { return filteredNodes<EventDefinition>(m_subNodes); }
std::vector<EventDefinition const*> const& interfaceEvents() const;
/// @returns all errors defined in this contract or any base contract
@ -549,6 +549,7 @@ private:
std::vector<ASTPointer<InheritanceSpecifier>> m_baseContracts;
std::vector<ASTPointer<ASTNode>> m_subNodes;
ContractKind m_contractKind;
mutable std::optional<std::vector<FunctionDefinition const*>> m_cachedDefinedFunctions;
bool m_abstract{false};
util::LazyInit<std::vector<std::pair<util::FixedHash<4>, FunctionTypePointer>>> m_interfaceFunctionList[2];