Add "this" contract's ctor to provided ctors set

- Also properly naming the 2 sets in checkAbstractConstructors() function
This commit is contained in:
Lefteris Karapetsas 2015-04-02 17:42:43 +02:00
parent 0c296cd809
commit eb84c3171a

13
AST.cpp
View File

@ -166,7 +166,7 @@ void ContractDefinition::checkAbstractConstructors()
if (constructor)
{
if (!constructor->getParameters().empty())
argumentsProvided.insert(constructor);
argumentsNeeded.insert(constructor);
for (auto const& modifier: constructor->getModifiers())
{
auto baseContract = dynamic_cast<ContractDefinition const*>(
@ -174,8 +174,8 @@ void ContractDefinition::checkAbstractConstructors()
if (baseContract)
{
FunctionDefinition const* baseConstructor = baseContract->getConstructor();
if (argumentsProvided.count(baseConstructor) == 1)
argumentsNeeded.insert(baseConstructor);
if (argumentsNeeded.count(baseConstructor) == 1)
argumentsProvided.insert(baseConstructor);
}
}
}
@ -186,10 +186,13 @@ void ContractDefinition::checkAbstractConstructors()
base->getName()->getReferencedDeclaration());
solAssert(baseContract, "");
FunctionDefinition const* baseConstructor = baseContract->getConstructor();
if (argumentsProvided.count(baseConstructor) == 1)
argumentsNeeded.insert(baseConstructor);
if (argumentsNeeded.count(baseConstructor) == 1)
argumentsProvided.insert(baseConstructor);
}
}
// add this contract's constructor to the provided too
if (getConstructor() && !getConstructor()->getParameters().empty())
argumentsProvided.insert(getConstructor());
if (argumentsProvided != argumentsNeeded)
setFullyImplemented(false);
}