mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Refactoring nextConstructor by moving it from CompilerContext to ContractDefinition
This commit is contained in:
@@ -217,6 +217,37 @@ ContractDefinitionAnnotation& ContractDefinition::annotation() const
|
||||
return initAnnotation<ContractDefinitionAnnotation>();
|
||||
}
|
||||
|
||||
ContractDefinition const* ContractDefinition::superContract(ContractDefinition const& _mostDerivedContract) const
|
||||
{
|
||||
auto const& hierarchy = _mostDerivedContract.annotation().linearizedBaseContracts;
|
||||
auto it = find(hierarchy.begin(), hierarchy.end(), this);
|
||||
solAssert(it != hierarchy.end(), "Base not found in inheritance hierarchy.");
|
||||
++it;
|
||||
if (it == hierarchy.end())
|
||||
return nullptr;
|
||||
else
|
||||
{
|
||||
solAssert(*it != this, "");
|
||||
return *it;
|
||||
}
|
||||
}
|
||||
|
||||
FunctionDefinition const* ContractDefinition::nextConstructor(ContractDefinition const& _mostDerivedContract) const
|
||||
{
|
||||
ContractDefinition const* next = superContract(_mostDerivedContract);
|
||||
if (next == nullptr)
|
||||
return nullptr;
|
||||
for (ContractDefinition const* c: _mostDerivedContract.annotation().linearizedBaseContracts)
|
||||
if (c == next || next == nullptr)
|
||||
{
|
||||
if (c->constructor())
|
||||
return c->constructor();
|
||||
next = nullptr;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
TypeNameAnnotation& TypeName::annotation() const
|
||||
{
|
||||
return initAnnotation<TypeNameAnnotation>();
|
||||
|
||||
Reference in New Issue
Block a user