Introduce proxies.

This commit is contained in:
chriseth
2019-12-11 15:15:51 +01:00
parent 7247e72d8b
commit 3e1b00b459
2 changed files with 162 additions and 21 deletions
+25
View File
@@ -25,6 +25,7 @@
#include <map>
#include <functional>
#include <set>
#include <variant>
namespace langutil
{
@@ -36,6 +37,24 @@ namespace dev
namespace solidity
{
/**
* Class that represents a function, public state variable or modifier
* and helps with overload checking.
* Comparison results in two elements being equal when they can override each
* other.
*/
class OverrideProxy
{
public:
bool operator<(OverrideProxy const& _other) const;
std::variant<
FunctionDefinition const*,
ModifierDefinition const*,
VariableDeclaration const*
> item;
};
/**
* Component that verifies override properties.
*/
@@ -107,11 +126,17 @@ private:
FunctionMultiSet const& inheritedFunctions(ContractDefinition const& _contract) const;
ModifierMultiSet const& inheritedModifiers(ContractDefinition const& _contract) const;
std::multiset<OverrideProxy> const& inheritedFunctionsByProxy(ContractDefinition const& _contract) const;
std::multiset<OverrideProxy> const& inheritedModifiersByProxy(ContractDefinition const& _contract) const;
langutil::ErrorReporter& m_errorReporter;
/// Cache for inheritedFunctions().
std::map<ContractDefinition const*, FunctionMultiSet> mutable m_inheritedFunctions;
std::map<ContractDefinition const*, ModifierMultiSet> mutable m_contractBaseModifiers;
std::map<ContractDefinition const*, std::multiset<OverrideProxy>> mutable m_inheritedFunctionsByProxy;
std::map<ContractDefinition const*, std::multiset<OverrideProxy>> mutable m_inheritedModifiersByProxy;
};
}