mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
analysis: Resolve event overloading
This commit is contained in:
2 files changed
+11
-14
No files matched your search
@@ -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;
|
||||
|
||||
Reference in new issue
Block a user