mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Parse override keyword for modifier definitions
This commit is contained in:
parent
f4c40080c4
commit
b76106fc4a
@ -596,21 +596,25 @@ public:
|
|||||||
ASTPointer<ASTString> const& _name,
|
ASTPointer<ASTString> const& _name,
|
||||||
Declaration::Visibility _visibility,
|
Declaration::Visibility _visibility,
|
||||||
ASTPointer<ParameterList> const& _parameters,
|
ASTPointer<ParameterList> const& _parameters,
|
||||||
|
ASTPointer<OverrideSpecifier> const& _overrides = nullptr,
|
||||||
ASTPointer<ParameterList> const& _returnParameters = ASTPointer<ParameterList>()
|
ASTPointer<ParameterList> const& _returnParameters = ASTPointer<ParameterList>()
|
||||||
):
|
):
|
||||||
Declaration(_location, _name, _visibility),
|
Declaration(_location, _name, _visibility),
|
||||||
m_parameters(_parameters),
|
m_parameters(_parameters),
|
||||||
|
m_overrides(_overrides),
|
||||||
m_returnParameters(_returnParameters)
|
m_returnParameters(_returnParameters)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<ASTPointer<VariableDeclaration>> const& parameters() const { return m_parameters->parameters(); }
|
std::vector<ASTPointer<VariableDeclaration>> const& parameters() const { return m_parameters->parameters(); }
|
||||||
|
ASTPointer<OverrideSpecifier> const& overrides() const { return m_overrides; }
|
||||||
std::vector<ASTPointer<VariableDeclaration>> const& returnParameters() const { return m_returnParameters->parameters(); }
|
std::vector<ASTPointer<VariableDeclaration>> const& returnParameters() const { return m_returnParameters->parameters(); }
|
||||||
ParameterList const& parameterList() const { return *m_parameters; }
|
ParameterList const& parameterList() const { return *m_parameters; }
|
||||||
ASTPointer<ParameterList> const& returnParameterList() const { return m_returnParameters; }
|
ASTPointer<ParameterList> const& returnParameterList() const { return m_returnParameters; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
ASTPointer<ParameterList> m_parameters;
|
ASTPointer<ParameterList> m_parameters;
|
||||||
|
ASTPointer<OverrideSpecifier> m_overrides;
|
||||||
ASTPointer<ParameterList> m_returnParameters;
|
ASTPointer<ParameterList> m_returnParameters;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -656,12 +660,11 @@ public:
|
|||||||
ASTPointer<ParameterList> const& _returnParameters,
|
ASTPointer<ParameterList> const& _returnParameters,
|
||||||
ASTPointer<Block> const& _body
|
ASTPointer<Block> const& _body
|
||||||
):
|
):
|
||||||
CallableDeclaration(_location, _name, _visibility, _parameters, _returnParameters),
|
CallableDeclaration(_location, _name, _visibility, _parameters, _overrides, _returnParameters),
|
||||||
Documented(_documentation),
|
Documented(_documentation),
|
||||||
ImplementationOptional(_body != nullptr),
|
ImplementationOptional(_body != nullptr),
|
||||||
m_stateMutability(_stateMutability),
|
m_stateMutability(_stateMutability),
|
||||||
m_isConstructor(_isConstructor),
|
m_isConstructor(_isConstructor),
|
||||||
m_overrides(_overrides),
|
|
||||||
m_functionModifiers(_modifiers),
|
m_functionModifiers(_modifiers),
|
||||||
m_body(_body)
|
m_body(_body)
|
||||||
{}
|
{}
|
||||||
@ -671,8 +674,8 @@ public:
|
|||||||
|
|
||||||
StateMutability stateMutability() const { return m_stateMutability; }
|
StateMutability stateMutability() const { return m_stateMutability; }
|
||||||
bool isConstructor() const { return m_isConstructor; }
|
bool isConstructor() const { return m_isConstructor; }
|
||||||
ASTPointer<OverrideSpecifier> const& overrides() const { return m_overrides; }
|
|
||||||
bool isFallback() const { return !m_isConstructor && name().empty(); }
|
bool isFallback() const { return !m_isConstructor && name().empty(); }
|
||||||
|
bool isOverridable() const { return !isFallback() && !isConstructor(); }
|
||||||
bool isPayable() const { return m_stateMutability == StateMutability::Payable; }
|
bool isPayable() const { return m_stateMutability == StateMutability::Payable; }
|
||||||
std::vector<ASTPointer<ModifierInvocation>> const& modifiers() const { return m_functionModifiers; }
|
std::vector<ASTPointer<ModifierInvocation>> const& modifiers() const { return m_functionModifiers; }
|
||||||
Block const& body() const { solAssert(m_body, ""); return *m_body; }
|
Block const& body() const { solAssert(m_body, ""); return *m_body; }
|
||||||
@ -700,7 +703,6 @@ public:
|
|||||||
private:
|
private:
|
||||||
StateMutability m_stateMutability;
|
StateMutability m_stateMutability;
|
||||||
bool m_isConstructor;
|
bool m_isConstructor;
|
||||||
ASTPointer<OverrideSpecifier> m_overrides;
|
|
||||||
std::vector<ASTPointer<ModifierInvocation>> m_functionModifiers;
|
std::vector<ASTPointer<ModifierInvocation>> m_functionModifiers;
|
||||||
ASTPointer<Block> m_body;
|
ASTPointer<Block> m_body;
|
||||||
};
|
};
|
||||||
@ -814,9 +816,10 @@ public:
|
|||||||
ASTPointer<ASTString> const& _name,
|
ASTPointer<ASTString> const& _name,
|
||||||
ASTPointer<ASTString> const& _documentation,
|
ASTPointer<ASTString> const& _documentation,
|
||||||
ASTPointer<ParameterList> const& _parameters,
|
ASTPointer<ParameterList> const& _parameters,
|
||||||
|
ASTPointer<OverrideSpecifier> const& _overrides,
|
||||||
ASTPointer<Block> const& _body
|
ASTPointer<Block> const& _body
|
||||||
):
|
):
|
||||||
CallableDeclaration(_location, _name, Visibility::Internal, _parameters),
|
CallableDeclaration(_location, _name, Visibility::Internal, _parameters, _overrides),
|
||||||
Documented(_documentation),
|
Documented(_documentation),
|
||||||
m_body(_body)
|
m_body(_body)
|
||||||
{
|
{
|
||||||
|
@ -262,6 +262,8 @@ void ModifierDefinition::accept(ASTVisitor& _visitor)
|
|||||||
if (_visitor.visit(*this))
|
if (_visitor.visit(*this))
|
||||||
{
|
{
|
||||||
m_parameters->accept(_visitor);
|
m_parameters->accept(_visitor);
|
||||||
|
if (m_overrides)
|
||||||
|
m_overrides->accept(_visitor);
|
||||||
m_body->accept(_visitor);
|
m_body->accept(_visitor);
|
||||||
}
|
}
|
||||||
_visitor.endVisit(*this);
|
_visitor.endVisit(*this);
|
||||||
@ -272,6 +274,8 @@ void ModifierDefinition::accept(ASTConstVisitor& _visitor) const
|
|||||||
if (_visitor.visit(*this))
|
if (_visitor.visit(*this))
|
||||||
{
|
{
|
||||||
m_parameters->accept(_visitor);
|
m_parameters->accept(_visitor);
|
||||||
|
if (m_overrides)
|
||||||
|
m_overrides->accept(_visitor);
|
||||||
m_body->accept(_visitor);
|
m_body->accept(_visitor);
|
||||||
}
|
}
|
||||||
_visitor.endVisit(*this);
|
_visitor.endVisit(*this);
|
||||||
|
@ -808,9 +808,15 @@ ASTPointer<ModifierDefinition> Parser::parseModifierDefinition()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
parameters = createEmptyParameterList();
|
parameters = createEmptyParameterList();
|
||||||
|
|
||||||
|
ASTPointer<OverrideSpecifier> overrides;
|
||||||
|
|
||||||
|
if (m_scanner->currentToken() == Token::Override)
|
||||||
|
overrides = parseOverrideSpecifier();
|
||||||
|
|
||||||
ASTPointer<Block> block = parseBlock();
|
ASTPointer<Block> block = parseBlock();
|
||||||
nodeFactory.setEndPositionFromNode(block);
|
nodeFactory.setEndPositionFromNode(block);
|
||||||
return nodeFactory.createNode<ModifierDefinition>(name, docstring, parameters, block);
|
return nodeFactory.createNode<ModifierDefinition>(name, docstring, parameters, overrides, block);
|
||||||
}
|
}
|
||||||
|
|
||||||
ASTPointer<EventDefinition> Parser::parseEventDefinition()
|
ASTPointer<EventDefinition> Parser::parseEventDefinition()
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
contract A { modifier mod(uint a) { _; } }
|
contract A { modifier mod(uint a) { _; } }
|
||||||
contract B is A { modifier mod(uint a) { _; } }
|
contract B is A { modifier mod(uint a) override { _; } }
|
||||||
|
Loading…
Reference in New Issue
Block a user