Moving contract fullyImplemented check to TypeRequirements

This commit is contained in:
Lefteris Karapetsas 2015-03-27 11:53:17 +01:00
parent 9d6d7ccab8
commit a7e78fadf5
3 changed files with 10 additions and 10 deletions

View File

@ -60,6 +60,7 @@ void ContractDefinition::checkTypeRequirements()
FunctionDefinition const* fallbackFunction = nullptr; FunctionDefinition const* fallbackFunction = nullptr;
for (ASTPointer<FunctionDefinition> const& function: getDefinedFunctions()) for (ASTPointer<FunctionDefinition> const& function: getDefinedFunctions())
{
if (function->getName().empty()) if (function->getName().empty())
{ {
if (fallbackFunction) if (fallbackFunction)
@ -71,6 +72,9 @@ void ContractDefinition::checkTypeRequirements()
BOOST_THROW_EXCEPTION(fallbackFunction->getParameterList().createTypeError("Fallback function cannot take parameters.")); BOOST_THROW_EXCEPTION(fallbackFunction->getParameterList().createTypeError("Fallback function cannot take parameters."));
} }
} }
if (!function->isFullyImplemented())
setFullyImplemented(false);
}
for (ASTPointer<ModifierDefinition> const& modifier: getFunctionModifiers()) for (ASTPointer<ModifierDefinition> const& modifier: getFunctionModifiers())
modifier->checkTypeRequirements(); modifier->checkTypeRequirements();

6
AST.h
View File

@ -206,6 +206,7 @@ public:
/// @return whether this node is fully implemented or not /// @return whether this node is fully implemented or not
bool isFullyImplemented() const { return m_implemented; } bool isFullyImplemented() const { return m_implemented; }
void setFullyImplemented(bool _implemented) { m_implemented = _implemented; }
protected: protected:
bool m_implemented; bool m_implemented;
@ -231,12 +232,11 @@ public:
std::vector<ASTPointer<VariableDeclaration>> const& _stateVariables, std::vector<ASTPointer<VariableDeclaration>> const& _stateVariables,
std::vector<ASTPointer<FunctionDefinition>> const& _definedFunctions, std::vector<ASTPointer<FunctionDefinition>> const& _definedFunctions,
std::vector<ASTPointer<ModifierDefinition>> const& _functionModifiers, std::vector<ASTPointer<ModifierDefinition>> const& _functionModifiers,
std::vector<ASTPointer<EventDefinition>> const& _events, std::vector<ASTPointer<EventDefinition>> const& _events
bool _isFullyImplemented
): ):
Declaration(_location, _name), Declaration(_location, _name),
Documented(_documentation), Documented(_documentation),
ImplementationOptional(_isFullyImplemented), ImplementationOptional(true),
m_baseContracts(_baseContracts), m_baseContracts(_baseContracts),
m_definedStructs(_definedStructs), m_definedStructs(_definedStructs),
m_definedEnums(_definedEnums), m_definedEnums(_definedEnums),

View File

@ -116,7 +116,6 @@ ASTPointer<ContractDefinition> Parser::parseContractDefinition()
{ {
ASTNodeFactory nodeFactory(*this); ASTNodeFactory nodeFactory(*this);
ASTPointer<ASTString> docString; ASTPointer<ASTString> docString;
bool contractFullyImplemented = true;
if (m_scanner->getCurrentCommentLiteral() != "") if (m_scanner->getCurrentCommentLiteral() != "")
docString = make_shared<ASTString>(m_scanner->getCurrentCommentLiteral()); docString = make_shared<ASTString>(m_scanner->getCurrentCommentLiteral());
expectToken(Token::Contract); expectToken(Token::Contract);
@ -145,8 +144,6 @@ ASTPointer<ContractDefinition> Parser::parseContractDefinition()
{ {
ASTPointer<FunctionDefinition> func = parseFunctionDefinition(name.get()); ASTPointer<FunctionDefinition> func = parseFunctionDefinition(name.get());
functions.push_back(func); functions.push_back(func);
if (!func->isFullyImplemented())
contractFullyImplemented = false;
} }
else if (currentToken == Token::Struct) else if (currentToken == Token::Struct)
structs.push_back(parseStructDefinition()); structs.push_back(parseStructDefinition());
@ -179,8 +176,7 @@ ASTPointer<ContractDefinition> Parser::parseContractDefinition()
stateVariables, stateVariables,
functions, functions,
modifiers, modifiers,
events, events
contractFullyImplemented
); );
} }