mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
FunctionType comparison/identifer to support all statemutability levels
This commit is contained in:
parent
4449820be3
commit
93be0dd923
@ -2215,10 +2215,7 @@ string FunctionType::identifier() const
|
|||||||
case Kind::Require: id += "require";break;
|
case Kind::Require: id += "require";break;
|
||||||
default: solAssert(false, "Unknown function location."); break;
|
default: solAssert(false, "Unknown function location."); break;
|
||||||
}
|
}
|
||||||
if (isConstant())
|
id += "_" + stateMutabilityToString(m_stateMutability);
|
||||||
id += "_constant";
|
|
||||||
if (isPayable())
|
|
||||||
id += "_payable";
|
|
||||||
id += identifierList(m_parameterTypes) + "returns" + identifierList(m_returnParameterTypes);
|
id += identifierList(m_parameterTypes) + "returns" + identifierList(m_returnParameterTypes);
|
||||||
if (m_gasSet)
|
if (m_gasSet)
|
||||||
id += "gas";
|
id += "gas";
|
||||||
@ -2237,8 +2234,7 @@ bool FunctionType::operator==(Type const& _other) const
|
|||||||
FunctionType const& other = dynamic_cast<FunctionType const&>(_other);
|
FunctionType const& other = dynamic_cast<FunctionType const&>(_other);
|
||||||
if (
|
if (
|
||||||
m_kind != other.m_kind ||
|
m_kind != other.m_kind ||
|
||||||
isConstant() != other.isConstant() ||
|
m_stateMutability != other.stateMutability() ||
|
||||||
isPayable() != other.isPayable() ||
|
|
||||||
m_parameterTypes.size() != other.m_parameterTypes.size() ||
|
m_parameterTypes.size() != other.m_parameterTypes.size() ||
|
||||||
m_returnParameterTypes.size() != other.m_returnParameterTypes.size()
|
m_returnParameterTypes.size() != other.m_returnParameterTypes.size()
|
||||||
)
|
)
|
||||||
@ -2300,10 +2296,8 @@ string FunctionType::toString(bool _short) const
|
|||||||
for (auto it = m_parameterTypes.begin(); it != m_parameterTypes.end(); ++it)
|
for (auto it = m_parameterTypes.begin(); it != m_parameterTypes.end(); ++it)
|
||||||
name += (*it)->toString(_short) + (it + 1 == m_parameterTypes.end() ? "" : ",");
|
name += (*it)->toString(_short) + (it + 1 == m_parameterTypes.end() ? "" : ",");
|
||||||
name += ")";
|
name += ")";
|
||||||
if (isConstant())
|
if (m_stateMutability != StateMutability::NonPayable)
|
||||||
name += " constant";
|
name += " " + stateMutabilityToString(m_stateMutability);
|
||||||
if (isPayable())
|
|
||||||
name += " payable";
|
|
||||||
if (m_kind == Kind::External)
|
if (m_kind == Kind::External)
|
||||||
name += " external";
|
name += " external";
|
||||||
if (!m_returnParameterTypes.empty())
|
if (!m_returnParameterTypes.empty())
|
||||||
|
@ -221,7 +221,7 @@ BOOST_AUTO_TEST_CASE(function_type)
|
|||||||
Json::Value retval = fun["children"][1]["children"][0];
|
Json::Value retval = fun["children"][1]["children"][0];
|
||||||
BOOST_CHECK_EQUAL(retval["name"], "VariableDeclaration");
|
BOOST_CHECK_EQUAL(retval["name"], "VariableDeclaration");
|
||||||
BOOST_CHECK_EQUAL(retval["attributes"]["name"], "");
|
BOOST_CHECK_EQUAL(retval["attributes"]["name"], "");
|
||||||
BOOST_CHECK_EQUAL(retval["attributes"]["type"], "function () constant external returns (uint256)");
|
BOOST_CHECK_EQUAL(retval["attributes"]["type"], "function () view external returns (uint256)");
|
||||||
funType = retval["children"][0];
|
funType = retval["children"][0];
|
||||||
BOOST_CHECK_EQUAL(funType["attributes"]["constant"], true);
|
BOOST_CHECK_EQUAL(funType["attributes"]["constant"], true);
|
||||||
BOOST_CHECK_EQUAL(funType["attributes"]["payable"], false);
|
BOOST_CHECK_EQUAL(funType["attributes"]["payable"], false);
|
||||||
|
@ -129,10 +129,10 @@ BOOST_AUTO_TEST_CASE(type_identifiers)
|
|||||||
BOOST_CHECK_EQUAL(t.identifier(), "t_tuple$_t_type$_t_enum$_Enum_$4_$_$_t_type$_t_struct$_Struct_$3_storage_ptr_$_$_t_array$_t_string_storage_$20_storage_ptr_$__$");
|
BOOST_CHECK_EQUAL(t.identifier(), "t_tuple$_t_type$_t_enum$_Enum_$4_$_$_t_type$_t_struct$_Struct_$3_storage_ptr_$_$_t_array$_t_string_storage_$20_storage_ptr_$__$");
|
||||||
|
|
||||||
TypePointer sha3fun = make_shared<FunctionType>(strings{}, strings{}, FunctionType::Kind::SHA3);
|
TypePointer sha3fun = make_shared<FunctionType>(strings{}, strings{}, FunctionType::Kind::SHA3);
|
||||||
BOOST_CHECK_EQUAL(sha3fun->identifier(), "t_function_sha3$__$returns$__$");
|
BOOST_CHECK_EQUAL(sha3fun->identifier(), "t_function_sha3_nonpayable$__$returns$__$");
|
||||||
|
|
||||||
FunctionType metaFun(TypePointers{sha3fun}, TypePointers{s.type()});
|
FunctionType metaFun(TypePointers{sha3fun}, TypePointers{s.type()});
|
||||||
BOOST_CHECK_EQUAL(metaFun.identifier(), "t_function_internal$_t_function_sha3$__$returns$__$_$returns$_t_type$_t_struct$_Struct_$3_storage_ptr_$_$");
|
BOOST_CHECK_EQUAL(metaFun.identifier(), "t_function_internal_nonpayable$_t_function_sha3_nonpayable$__$returns$__$_$returns$_t_type$_t_struct$_Struct_$3_storage_ptr_$_$");
|
||||||
|
|
||||||
TypePointer m = make_shared<MappingType>(Type::fromElementaryTypeName("bytes32"), s.type());
|
TypePointer m = make_shared<MappingType>(Type::fromElementaryTypeName("bytes32"), s.type());
|
||||||
MappingType m2(Type::fromElementaryTypeName("uint64"), m);
|
MappingType m2(Type::fromElementaryTypeName("uint64"), m);
|
||||||
|
Loading…
Reference in New Issue
Block a user