mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Update ViewPureChecker
This commit is contained in:
parent
c274d07a73
commit
275a43068c
@ -323,18 +323,35 @@ ViewPureChecker::MutabilityAndLocation const& ViewPureChecker::modifierMutabilit
|
|||||||
return m_inferredMutability.at(&_modifier);
|
return m_inferredMutability.at(&_modifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO needs to visit binaryoperation as well
|
void ViewPureChecker::reportFunctionCallMutability(StateMutability _mutability, langutil::SourceLocation const& _location)
|
||||||
|
{
|
||||||
|
// We only require "nonpayable" to call a payable function.
|
||||||
|
if (_mutability == StateMutability::Payable)
|
||||||
|
_mutability = StateMutability::NonPayable;
|
||||||
|
reportMutability(_mutability, _location);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ViewPureChecker::endVisit(BinaryOperation const& _binaryOperation)
|
||||||
|
{
|
||||||
|
if (_binaryOperation.annotation().userDefinedFunction)
|
||||||
|
reportFunctionCallMutability(_binaryOperation.annotation().userDefinedFunction->stateMutability(), _binaryOperation.location());
|
||||||
|
}
|
||||||
|
|
||||||
|
void ViewPureChecker::endVisit(UnaryOperation const& _unaryOperation)
|
||||||
|
{
|
||||||
|
if (_unaryOperation.annotation().userDefinedFunction)
|
||||||
|
reportFunctionCallMutability(_unaryOperation.annotation().userDefinedFunction->stateMutability(), _unaryOperation.location());
|
||||||
|
}
|
||||||
|
|
||||||
void ViewPureChecker::endVisit(FunctionCall const& _functionCall)
|
void ViewPureChecker::endVisit(FunctionCall const& _functionCall)
|
||||||
{
|
{
|
||||||
if (*_functionCall.annotation().kind != FunctionCallKind::FunctionCall)
|
if (*_functionCall.annotation().kind != FunctionCallKind::FunctionCall)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
StateMutability mutability = dynamic_cast<FunctionType const&>(*_functionCall.expression().annotation().type).stateMutability();
|
reportFunctionCallMutability(
|
||||||
// We only require "nonpayable" to call a payble function.
|
dynamic_cast<FunctionType const&>(*_functionCall.expression().annotation().type).stateMutability(),
|
||||||
if (mutability == StateMutability::Payable)
|
_functionCall.location()
|
||||||
mutability = StateMutability::NonPayable;
|
);
|
||||||
reportMutability(mutability, _functionCall.location());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ViewPureChecker::visit(MemberAccess const& _memberAccess)
|
bool ViewPureChecker::visit(MemberAccess const& _memberAccess)
|
||||||
|
@ -54,6 +54,8 @@ private:
|
|||||||
|
|
||||||
bool visit(FunctionDefinition const& _funDef) override;
|
bool visit(FunctionDefinition const& _funDef) override;
|
||||||
void endVisit(FunctionDefinition const& _funDef) override;
|
void endVisit(FunctionDefinition const& _funDef) override;
|
||||||
|
void endVisit(BinaryOperation const& _binaryOperation) override;
|
||||||
|
void endVisit(UnaryOperation const& _unaryOperation) override;
|
||||||
bool visit(ModifierDefinition const& _modifierDef) override;
|
bool visit(ModifierDefinition const& _modifierDef) override;
|
||||||
void endVisit(ModifierDefinition const& _modifierDef) override;
|
void endVisit(ModifierDefinition const& _modifierDef) override;
|
||||||
void endVisit(Identifier const& _identifier) override;
|
void endVisit(Identifier const& _identifier) override;
|
||||||
@ -73,6 +75,8 @@ private:
|
|||||||
std::optional<langutil::SourceLocation> const& _nestedLocation = {}
|
std::optional<langutil::SourceLocation> const& _nestedLocation = {}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
void reportFunctionCallMutability(StateMutability _mutability, langutil::SourceLocation const& _location);
|
||||||
|
|
||||||
/// Determines the mutability of modifier if not already cached.
|
/// Determines the mutability of modifier if not already cached.
|
||||||
MutabilityAndLocation const& modifierMutability(ModifierDefinition const& _modifier);
|
MutabilityAndLocation const& modifierMutability(ModifierDefinition const& _modifier);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user