mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Moving contract fullyImplemented check to TypeRequirements
This commit is contained in:
parent
9d6d7ccab8
commit
a7e78fadf5
4
AST.cpp
4
AST.cpp
@ -60,6 +60,7 @@ void ContractDefinition::checkTypeRequirements()
|
||||
|
||||
FunctionDefinition const* fallbackFunction = nullptr;
|
||||
for (ASTPointer<FunctionDefinition> const& function: getDefinedFunctions())
|
||||
{
|
||||
if (function->getName().empty())
|
||||
{
|
||||
if (fallbackFunction)
|
||||
@ -71,6 +72,9 @@ void ContractDefinition::checkTypeRequirements()
|
||||
BOOST_THROW_EXCEPTION(fallbackFunction->getParameterList().createTypeError("Fallback function cannot take parameters."));
|
||||
}
|
||||
}
|
||||
if (!function->isFullyImplemented())
|
||||
setFullyImplemented(false);
|
||||
}
|
||||
for (ASTPointer<ModifierDefinition> const& modifier: getFunctionModifiers())
|
||||
modifier->checkTypeRequirements();
|
||||
|
||||
|
10
AST.h
10
AST.h
@ -206,6 +206,7 @@ public:
|
||||
|
||||
/// @return whether this node is fully implemented or not
|
||||
bool isFullyImplemented() const { return m_implemented; }
|
||||
void setFullyImplemented(bool _implemented) { m_implemented = _implemented; }
|
||||
|
||||
protected:
|
||||
bool m_implemented;
|
||||
@ -231,12 +232,11 @@ public:
|
||||
std::vector<ASTPointer<VariableDeclaration>> const& _stateVariables,
|
||||
std::vector<ASTPointer<FunctionDefinition>> const& _definedFunctions,
|
||||
std::vector<ASTPointer<ModifierDefinition>> const& _functionModifiers,
|
||||
std::vector<ASTPointer<EventDefinition>> const& _events,
|
||||
bool _isFullyImplemented
|
||||
std::vector<ASTPointer<EventDefinition>> const& _events
|
||||
):
|
||||
Declaration(_location, _name),
|
||||
Documented(_documentation),
|
||||
ImplementationOptional(_isFullyImplemented),
|
||||
ImplementationOptional(true),
|
||||
m_baseContracts(_baseContracts),
|
||||
m_definedStructs(_definedStructs),
|
||||
m_definedEnums(_definedEnums),
|
||||
@ -244,7 +244,7 @@ public:
|
||||
m_definedFunctions(_definedFunctions),
|
||||
m_functionModifiers(_functionModifiers),
|
||||
m_events(_events)
|
||||
{}
|
||||
{}
|
||||
|
||||
virtual void accept(ASTVisitor& _visitor) override;
|
||||
virtual void accept(ASTConstVisitor& _visitor) const override;
|
||||
@ -421,7 +421,7 @@ public:
|
||||
m_functionModifiers(_modifiers),
|
||||
m_returnParameters(_returnParameters),
|
||||
m_body(_body)
|
||||
{}
|
||||
{}
|
||||
|
||||
virtual void accept(ASTVisitor& _visitor) override;
|
||||
virtual void accept(ASTConstVisitor& _visitor) const override;
|
||||
|
@ -116,7 +116,6 @@ ASTPointer<ContractDefinition> Parser::parseContractDefinition()
|
||||
{
|
||||
ASTNodeFactory nodeFactory(*this);
|
||||
ASTPointer<ASTString> docString;
|
||||
bool contractFullyImplemented = true;
|
||||
if (m_scanner->getCurrentCommentLiteral() != "")
|
||||
docString = make_shared<ASTString>(m_scanner->getCurrentCommentLiteral());
|
||||
expectToken(Token::Contract);
|
||||
@ -145,8 +144,6 @@ ASTPointer<ContractDefinition> Parser::parseContractDefinition()
|
||||
{
|
||||
ASTPointer<FunctionDefinition> func = parseFunctionDefinition(name.get());
|
||||
functions.push_back(func);
|
||||
if (!func->isFullyImplemented())
|
||||
contractFullyImplemented = false;
|
||||
}
|
||||
else if (currentToken == Token::Struct)
|
||||
structs.push_back(parseStructDefinition());
|
||||
@ -179,8 +176,7 @@ ASTPointer<ContractDefinition> Parser::parseContractDefinition()
|
||||
stateVariables,
|
||||
functions,
|
||||
modifiers,
|
||||
events,
|
||||
contractFullyImplemented
|
||||
events
|
||||
);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user