analysis: Resolve event overloading

This commit is contained in:
Yoichi Hirai committed 2017-01-23 15:25:13 +01:00
1 parent 4c09e81c3e
commit 846f7dc3ea
2 files changed
+11 -14

No files matched your search

+9 -12
View File
@@ -42,28 +42,25 @@ Declaration const* DeclarationContainer::conflictingDeclaration(
if (m_invisibleDeclarations.count(*_name))
declarations += m_invisibleDeclarations.at(*_name);
if (dynamic_cast<FunctionDefinition const*>(&_declaration))
if (dynamic_cast<FunctionDefinition const*>(&_declaration) ||
dynamic_cast<EventDefinition const*>(&_declaration)
)
{
// check that all other declarations with the same name are functions or a public state variable
// check that all other declarations with the same name are functions or a public state variable or events.
// And then check that the signatures are different.
for (Declaration const* declaration: declarations)
{
if (dynamic_cast<FunctionDefinition const*>(declaration))
continue;
if (auto variableDeclaration = dynamic_cast<VariableDeclaration const*>(declaration))
{
if (variableDeclaration->isStateVariable() && !variableDeclaration->isConstant() && variableDeclaration->isPublic())
continue;
return declaration;
}
return declaration;
}
}
else if (dynamic_cast<EventDefinition const*>(&_declaration))
{
// check that all other declarations with the same name are events
for (Declaration const* declaration: declarations)
if (!dynamic_cast<EventDefinition const*>(declaration))
if (!dynamic_cast<FunctionDefinition const*>(declaration) &&
!dynamic_cast<EventDefinition const*>(declaration))
return declaration;
// Or, continue.
}
}
else if (declarations.size() == 1 && declarations.front() == &_declaration)
return nullptr;