Browse Source

Use lambda to avoid code duplication in inheritableMembers

cl-refactor
Lefteris Karapetsas 10 years ago
parent
commit
58005fd203
  1. 25
      libsolidity/AST.cpp

25
libsolidity/AST.cpp

@ -217,26 +217,23 @@ vector<ASTPointer<Declaration>> const& ContractDefinition::getInheritableMembers
m_inheritableMembers.reset(new vector<ASTPointer<Declaration>>());
for (ContractDefinition const* contract: getLinearizedBaseContracts())
{
for (ASTPointer<FunctionDefinition> const& f: contract->getDefinedFunctions())
if (memberSeen.count(f->getName()) == 0 && f->isVisibleInDerivedContracts())
auto addInheritableMember = [&](ASTPointer<Declaration> const& _decl)
{
if (memberSeen.count(_decl->getName()) == 0 && _decl->isVisibleInDerivedContracts())
{
memberSeen.insert(f->getName());
m_inheritableMembers->push_back(f);
memberSeen.insert(_decl->getName());
m_inheritableMembers->push_back(_decl);
}
};
for (ASTPointer<FunctionDefinition> const& f: contract->getDefinedFunctions())
addInheritableMember(f);
for (ASTPointer<VariableDeclaration> const& v: contract->getStateVariables())
if (memberSeen.count(v->getName()) == 0 && v->isVisibleInDerivedContracts())
{
memberSeen.insert(v->getName());
m_inheritableMembers->push_back(v);
}
addInheritableMember(v);
for (ASTPointer<StructDefinition> const& s: contract->getDefinedStructs())
if (memberSeen.count(s->getName()) == 0 && s->isVisibleInDerivedContracts())
{
memberSeen.insert(s->getName());
m_inheritableMembers->push_back(s);
}
addInheritableMember(s);
}
}
return *m_inheritableMembers;

Loading…
Cancel
Save