MCPcopy Create free account
hub / github.com/argotorg/solidity / validatorFunction

Method validatorFunction

libsolidity/codegen/YulUtilFunctions.cpp:4059–4111  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4057}
4058
4059std::string YulUtilFunctions::validatorFunction(Type const& _type, bool _revertOnFailure)
4060{
4061 std::string functionName = std::string("validator_") + (_revertOnFailure ? "revert_" : "assert_") + _type.identifier();
4062 return m_functionCollector.createFunction(functionName, [&]() {
4063 Whiskers templ(R"(
4064 function <functionName>(value) {
4065 if iszero(<condition>) { <failure> }
4066 }
4067 )");
4068 templ("functionName", functionName);
4069 PanicCode panicCode = PanicCode::Generic;
4070
4071 switch (_type.category())
4072 {
4073 case Type::Category::Address:
4074 case Type::Category::Integer:
4075 case Type::Category::RationalNumber:
4076 case Type::Category::Bool:
4077 case Type::Category::FixedPoint:
4078 case Type::Category::Function:
4079 case Type::Category::Array:
4080 case Type::Category::Struct:
4081 case Type::Category::Mapping:
4082 case Type::Category::FixedBytes:
4083 case Type::Category::Contract:
4084 case Type::Category::UserDefinedValueType:
4085 {
4086 templ("condition", "eq(value, " + cleanupFunction(_type) + "(value))");
4087 break;
4088 }
4089 case Type::Category::Enum:
4090 {
4091 size_t members = dynamic_cast<EnumType const&>(_type).numberOfMembers();
4092 solAssert(members > 0, "empty enum should have caused a parser error.");
4093 panicCode = PanicCode::EnumConversionError;
4094 templ("condition", "lt(value, " + std::to_string(members) + ")");
4095 break;
4096 }
4097 case Type::Category::InaccessibleDynamic:
4098 templ("condition", "1");
4099 break;
4100 default:
4101 solAssert(false, "Validation of type " + _type.identifier() + " requested.");
4102 }
4103
4104 if (_revertOnFailure)
4105 templ("failure", "revert(0, 0)");
4106 else
4107 templ("failure", panicFunction(panicCode) + "()");
4108
4109 return templ.render();
4110 });
4111}
4112
4113std::string YulUtilFunctions::packedHashFunction(
4114 std::vector<Type const*> const& _givenTypes,

Calls 6

identifierMethod · 0.80
numberOfMembersMethod · 0.80
renderMethod · 0.80
to_stringFunction · 0.50
createFunctionMethod · 0.45
categoryMethod · 0.45

Tested by

no test coverage detected