mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Clean up visibility via contract name and fix ICE on calling unimplemented base function.
This commit is contained in:
+12
-30
@@ -91,6 +91,11 @@ vector<VariableDeclaration const*> ContractDefinition::stateVariablesIncludingIn
|
||||
return stateVars;
|
||||
}
|
||||
|
||||
bool ContractDefinition::derivesFrom(ContractDefinition const& _base) const
|
||||
{
|
||||
return util::contains(annotation().linearizedBaseContracts, &_base);
|
||||
}
|
||||
|
||||
map<util::FixedHash<4>, FunctionTypePointer> ContractDefinition::interfaceFunctions() const
|
||||
{
|
||||
auto exportedFunctionList = interfaceFunctionList();
|
||||
@@ -202,36 +207,6 @@ vector<pair<util::FixedHash<4>, FunctionTypePointer>> const& ContractDefinition:
|
||||
return *m_interfaceFunctionList;
|
||||
}
|
||||
|
||||
vector<Declaration const*> const& ContractDefinition::inheritableMembers() const
|
||||
{
|
||||
if (!m_inheritableMembers)
|
||||
{
|
||||
m_inheritableMembers = make_unique<vector<Declaration const*>>();
|
||||
auto addInheritableMember = [&](Declaration const* _decl)
|
||||
{
|
||||
solAssert(_decl, "addInheritableMember got a nullpointer.");
|
||||
if (_decl->isVisibleInDerivedContracts())
|
||||
m_inheritableMembers->push_back(_decl);
|
||||
};
|
||||
|
||||
for (FunctionDefinition const* f: definedFunctions())
|
||||
addInheritableMember(f);
|
||||
|
||||
for (VariableDeclaration const* v: stateVariables())
|
||||
addInheritableMember(v);
|
||||
|
||||
for (StructDefinition const* s: definedStructs())
|
||||
addInheritableMember(s);
|
||||
|
||||
for (EnumDefinition const* e: definedEnums())
|
||||
addInheritableMember(e);
|
||||
|
||||
for (EventDefinition const* e: events())
|
||||
addInheritableMember(e);
|
||||
}
|
||||
return *m_inheritableMembers;
|
||||
}
|
||||
|
||||
TypePointer ContractDefinition::type() const
|
||||
{
|
||||
return TypeProvider::typeType(TypeProvider::contract(*this));
|
||||
@@ -322,6 +297,13 @@ TypePointer FunctionDefinition::type() const
|
||||
return TypeProvider::function(*this, FunctionType::Kind::Internal);
|
||||
}
|
||||
|
||||
TypePointer FunctionDefinition::typeViaContractName() const
|
||||
{
|
||||
if (annotation().contract->isLibrary())
|
||||
return FunctionType(*this).asCallableFunction(true);
|
||||
return TypeProvider::function(*this, FunctionType::Kind::Declaration);
|
||||
}
|
||||
|
||||
string FunctionDefinition::externalSignature() const
|
||||
{
|
||||
return TypeProvider::function(*this)->externalSignature();
|
||||
|
||||
Reference in New Issue
Block a user