mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Cache functions by name.
This commit is contained in:
@@ -36,6 +36,9 @@
|
||||
|
||||
#include <json/json.h>
|
||||
|
||||
#include <range/v3/view/subrange.hpp>
|
||||
#include <range/v3/view/map.hpp>
|
||||
|
||||
#include <memory>
|
||||
#include <optional>
|
||||
#include <string>
|
||||
@@ -497,6 +500,13 @@ public:
|
||||
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); }
|
||||
/// @returns a view<FunctionDefinition const*> of all functions
|
||||
/// defined in this contract of the given name (excluding inherited functions).
|
||||
auto definedFunctions(std::string const& _name) const
|
||||
{
|
||||
auto&& [b, e] = definedFunctionsByName().equal_range(_name);
|
||||
return ranges::subrange<decltype(b)>(b, e) | ranges::views::values;
|
||||
}
|
||||
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
|
||||
@@ -546,6 +556,8 @@ public:
|
||||
FunctionDefinition const* nextConstructor(ContractDefinition const& _mostDerivedContract) const;
|
||||
|
||||
private:
|
||||
std::multimap<std::string, FunctionDefinition const*> const& definedFunctionsByName() const;
|
||||
|
||||
std::vector<ASTPointer<InheritanceSpecifier>> m_baseContracts;
|
||||
std::vector<ASTPointer<ASTNode>> m_subNodes;
|
||||
ContractKind m_contractKind;
|
||||
@@ -553,6 +565,7 @@ private:
|
||||
|
||||
util::LazyInit<std::vector<std::pair<util::FixedHash<4>, FunctionTypePointer>>> m_interfaceFunctionList[2];
|
||||
util::LazyInit<std::vector<EventDefinition const*>> m_interfaceEvents;
|
||||
util::LazyInit<std::multimap<std::string, FunctionDefinition const*>> m_definedFunctionsByName;
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user