getInheritableMembers() does not look at BaseContracts

- Also adding tests for improper accessing members of other contracts.
This commit is contained in:
Lefteris Karapetsas 2015-02-28 18:30:33 +01:00
parent efe8f9f8a0
commit bbaa9fef6c

View File

@ -215,8 +215,6 @@ vector<ASTPointer<Declaration>> const& ContractDefinition::getInheritableMembers
{ {
set<string> memberSeen; set<string> memberSeen;
m_inheritableMembers.reset(new vector<ASTPointer<Declaration>>()); m_inheritableMembers.reset(new vector<ASTPointer<Declaration>>());
for (ContractDefinition const* contract: getLinearizedBaseContracts())
{
auto addInheritableMember = [&](ASTPointer<Declaration> const& _decl) auto addInheritableMember = [&](ASTPointer<Declaration> const& _decl)
{ {
if (memberSeen.count(_decl->getName()) == 0 && _decl->isVisibleInDerivedContracts()) if (memberSeen.count(_decl->getName()) == 0 && _decl->isVisibleInDerivedContracts())
@ -226,16 +224,15 @@ vector<ASTPointer<Declaration>> const& ContractDefinition::getInheritableMembers
} }
}; };
for (ASTPointer<FunctionDefinition> const& f: contract->getDefinedFunctions()) for (ASTPointer<FunctionDefinition> const& f: getDefinedFunctions())
addInheritableMember(f); addInheritableMember(f);
for (ASTPointer<VariableDeclaration> const& v: contract->getStateVariables()) for (ASTPointer<VariableDeclaration> const& v: getStateVariables())
addInheritableMember(v); addInheritableMember(v);
for (ASTPointer<StructDefinition> const& s: contract->getDefinedStructs()) for (ASTPointer<StructDefinition> const& s: getDefinedStructs())
addInheritableMember(s); addInheritableMember(s);
} }
}
return *m_inheritableMembers; return *m_inheritableMembers;
} }