mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Type checking for pure expressions.
This commit is contained in:
@@ -156,6 +156,8 @@ struct ExpressionAnnotation: ASTAnnotation
|
||||
TypePointer type;
|
||||
/// Whether the expression is a constant variable
|
||||
bool isConstant = false;
|
||||
/// Whether the expression is pure, i.e. compile-time constant.
|
||||
bool isPure = false;
|
||||
/// Whether it is an LValue (i.e. something that can be assigned to).
|
||||
bool isLValue = false;
|
||||
/// Whether the expression is used in a context where the LValue is actually required.
|
||||
|
||||
@@ -2456,6 +2456,18 @@ u256 FunctionType::externalIdentifier() const
|
||||
return FixedHash<4>::Arith(FixedHash<4>(dev::keccak256(externalSignature())));
|
||||
}
|
||||
|
||||
bool FunctionType::isPure() const
|
||||
{
|
||||
return
|
||||
m_location == Location::SHA3 ||
|
||||
m_location == Location::ECRecover ||
|
||||
m_location == Location::SHA256 ||
|
||||
m_location == Location::RIPEMD160 ||
|
||||
m_location == Location::AddMod ||
|
||||
m_location == Location::MulMod ||
|
||||
m_location == Location::ObjectCreation;
|
||||
}
|
||||
|
||||
TypePointers FunctionType::parseElementaryTypeVector(strings const& _types)
|
||||
{
|
||||
TypePointers pointers;
|
||||
|
||||
@@ -972,6 +972,10 @@ public:
|
||||
}
|
||||
bool hasDeclaration() const { return !!m_declaration; }
|
||||
bool isConstant() const { return m_isConstant; }
|
||||
/// @returns true if the the result of this function only depends on its arguments
|
||||
/// and it does not modify the state.
|
||||
/// Currently, this will only return true for internal functions like keccak and ecrecover.
|
||||
bool isPure() const;
|
||||
bool isPayable() const { return m_isPayable; }
|
||||
/// @return A shared pointer of an ASTString.
|
||||
/// Can contain a nullptr in which case indicates absence of documentation
|
||||
|
||||
Reference in New Issue
Block a user