Merge pull request #1245 from ethereum/1215

Allow multiple events of the same name
This commit is contained in:
chriseth
2017-01-24 11:52:21 +01:00
committed by GitHub
5 changed files with 177 additions and 7 deletions
+17 -5
View File
@@ -42,20 +42,32 @@ 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;
if (
dynamic_cast<FunctionDefinition const*>(&_declaration) &&
!dynamic_cast<FunctionDefinition const*>(declaration)
)
return declaration;
if (
dynamic_cast<EventDefinition const*>(&_declaration) &&
!dynamic_cast<EventDefinition const*>(declaration)
)
return declaration;
// Or, continue.
}
}
else if (declarations.size() == 1 && declarations.front() == &_declaration)
+2 -2
View File
@@ -260,8 +260,8 @@ vector<Declaration const*> NameAndTypeResolver::cleanedDeclarations(
for (auto it = _declarations.begin(); it != _declarations.end(); ++it)
{
solAssert(*it, "");
// the declaration is functionDefinition or a VariableDeclaration while declarations > 1
solAssert(dynamic_cast<FunctionDefinition const*>(*it) || dynamic_cast<VariableDeclaration const*>(*it),
// the declaration is functionDefinition, eventDefinition or a VariableDeclaration while declarations > 1
solAssert(dynamic_cast<FunctionDefinition const*>(*it) || dynamic_cast<EventDefinition const*>(*it) || dynamic_cast<VariableDeclaration const*>(*it),
"Found overloading involving something not a function or a variable");
shared_ptr<FunctionType const> functionType { (*it)->functionType(false) };