diff --git a/libsolidity/ast/ASTEnums.h b/libsolidity/ast/ASTEnums.h index 87f9817c3c5b..3e5d1ac88d90 100644 --- a/libsolidity/ast/ASTEnums.h +++ b/libsolidity/ast/ASTEnums.h @@ -36,28 +36,26 @@ enum class VirtualLookup { Static, Virtual, Super }; // How a function can mutate the EVM state. enum class StateMutability { Pure, View, NonPayable, Payable }; -/// Visibility ordered from restricted to unrestricted. -enum class Visibility { Default, Private, Internal, Public, External }; +/// State mutability names used for conversion from and to std::string. +static constexpr std::array STATE_MUTABILITY_NAMES = { "pure", "view", "nonpayable", "payable" }; -enum class Arithmetic { Checked, Wrapping }; +inline constexpr StateMutability stateMutabilityFromString(std::string const& _stateMutability) +{ + auto it = std::ranges::find(STATE_MUTABILITY_NAMES, _stateMutability); + solAssert(it != STATE_MUTABILITY_NAMES.end(), "Unknown state mutability \"" + _stateMutability + "\""); + return static_cast(std::ranges::distance(STATE_MUTABILITY_NAMES.begin(), it)); +} -inline std::string stateMutabilityToString(StateMutability const& _stateMutability) +inline constexpr std::string stateMutabilityToString(StateMutability const& _stateMutability) { - switch (_stateMutability) - { - case StateMutability::Pure: - return "pure"; - case StateMutability::View: - return "view"; - case StateMutability::NonPayable: - return "nonpayable"; - case StateMutability::Payable: - return "payable"; - default: - solAssert(false, "Unknown state mutability."); - } + return STATE_MUTABILITY_NAMES[static_cast(_stateMutability)]; } +/// Visibility ordered from restricted to unrestricted. +enum class Visibility { Default, Private, Internal, Public, External }; + +enum class Arithmetic { Checked, Wrapping }; + class Type; /// Container for function call parameter types & names