diff --git a/docs/abi-spec.rst b/docs/abi-spec.rst index 1b61351fa..82f6b2787 100644 --- a/docs/abi-spec.rst +++ b/docs/abi-spec.rst @@ -62,7 +62,7 @@ The following elementary types exist: - ``bool``: equivalent to ``uint8`` restricted to the values 0 and 1. For computing the function selector, ``bool`` is used. - ``fixedx``: signed fixed-point decimal number of ``M`` bits, ``8 <= M <= 256``, - ``M % 8 == 0``, and ``0 < N <= 80``, which denotes the value ``v`` as ``v / (10 ** N)``. + ``M % 8 == 0``, and ``0 < N <= 77``, which denotes the value ``v`` as ``v / (10 ** N)``. - ``ufixedx``: unsigned variant of ``fixedx``. diff --git a/liblangutil/Token.cpp b/liblangutil/Token.cpp index 8bdaff1fd..fd3805b25 100644 --- a/liblangutil/Token.cpp +++ b/liblangutil/Token.cpp @@ -213,7 +213,7 @@ tuple fromIdentifierOrKeyword(string const& _ int n = parseSize(positionX + 1, _literal.end()); if ( 8 <= m && m <= 256 && m % 8 == 0 && - 0 <= n && n <= 80 + 0 <= n && n <= 77 ) { if (keyword == Token::UFixed) return make_tuple(Token::UFixedMxN, m, n); diff --git a/libsolidity/ast/Types.cpp b/libsolidity/ast/Types.cpp index 6fc50296a..ed56b41ac 100644 --- a/libsolidity/ast/Types.cpp +++ b/libsolidity/ast/Types.cpp @@ -670,7 +670,7 @@ FixedPointType::FixedPointType(unsigned _totalBits, unsigned _fractionalDigits, m_totalBits(_totalBits), m_fractionalDigits(_fractionalDigits), m_modifier(_modifier) { solAssert( - 8 <= m_totalBits && m_totalBits <= 256 && m_totalBits % 8 == 0 && m_fractionalDigits <= 80, + 8 <= m_totalBits && m_totalBits <= 256 && m_totalBits % 8 == 0 && m_fractionalDigits <= 77, "Invalid bit number(s) for fixed type: " + util::toString(_totalBits) + "x" + util::toString(_fractionalDigits) ); diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/317_fixed_type_valid_explicit_conversions.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/317_fixed_type_valid_explicit_conversions.sol index 99f9bad14..37ffe3d74 100644 --- a/test/libsolidity/syntaxTests/nameAndTypeResolution/317_fixed_type_valid_explicit_conversions.sol +++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/317_fixed_type_valid_explicit_conversions.sol @@ -1,7 +1,7 @@ contract test { function f() public { - ufixed256x18 a = ufixed256x18(1/3); a; - ufixed248x18 b = ufixed248x18(1/3); b; + ufixed256x77 a = ufixed256x77(1/3); a; + ufixed248x77 b = ufixed248x77(1/3); b; ufixed8x1 c = ufixed8x1(1/3); c; } } diff --git a/test/libsolidity/syntaxTests/parsing/elemantary_non_address_payable_state_variable.sol b/test/libsolidity/syntaxTests/parsing/elemantary_non_address_payable_state_variable.sol index bc5db10ba..916bddd6b 100644 --- a/test/libsolidity/syntaxTests/parsing/elemantary_non_address_payable_state_variable.sol +++ b/test/libsolidity/syntaxTests/parsing/elemantary_non_address_payable_state_variable.sol @@ -9,9 +9,9 @@ contract C { bytes payable h; bytes32 payable i; fixed payable j; - fixed80x80 payable k; + fixed80x77 payable k; ufixed payable l; - ufixed80x80 payable m; + ufixed80x77 payable m; } // ---- // ParserError 9106: (22-29): State mutability can only be specified for address types. diff --git a/test/libsolidity/syntaxTests/parsing/elementary_non_address_payable_argument.sol b/test/libsolidity/syntaxTests/parsing/elementary_non_address_payable_argument.sol index 7d26f74c0..475cefa2f 100644 --- a/test/libsolidity/syntaxTests/parsing/elementary_non_address_payable_argument.sol +++ b/test/libsolidity/syntaxTests/parsing/elementary_non_address_payable_argument.sol @@ -9,9 +9,9 @@ contract C { function h(bytes payable) public pure {} function i(bytes32 payable) public pure {} function j(fixed payable) public pure {} - function k(fixed80x80 payable) public pure {} + function k(fixed80x77 payable) public pure {} function l(ufixed payable) public pure {} - function m(ufixed80x80 payable) public pure {} + function m(ufixed80x77 payable) public pure {} } // ---- // ParserError 9106: (33-40): State mutability can only be specified for address types. diff --git a/test/libsolidity/syntaxTests/parsing/elementary_non_address_payable_local.sol b/test/libsolidity/syntaxTests/parsing/elementary_non_address_payable_local.sol index 2aad9cd04..99bf335a0 100644 --- a/test/libsolidity/syntaxTests/parsing/elementary_non_address_payable_local.sol +++ b/test/libsolidity/syntaxTests/parsing/elementary_non_address_payable_local.sol @@ -10,9 +10,9 @@ contract C { bytes payable h; bytes32 payable i; fixed payable j; - fixed80x80 payable k; + fixed80x77 payable k; ufixed payable l; - ufixed80x80 payable m; + ufixed80x77 payable m; } } // ---- diff --git a/test/libsolidity/syntaxTests/parsing/elementary_non_address_payable_return.sol b/test/libsolidity/syntaxTests/parsing/elementary_non_address_payable_return.sol index 026138cde..2bfc63d0f 100644 --- a/test/libsolidity/syntaxTests/parsing/elementary_non_address_payable_return.sol +++ b/test/libsolidity/syntaxTests/parsing/elementary_non_address_payable_return.sol @@ -9,9 +9,9 @@ contract C { function h() public pure returns (bytes payable) {} function i() public pure returns (bytes32 payable) {} function j() public pure returns (fixed payable) {} - function k() public pure returns (fixed80x80 payable) {} + function k() public pure returns (fixed80x77 payable) {} function l() public pure returns (ufixed payable) {} - function m() public pure returns (ufixed80x80 payable) {} + function m() public pure returns (ufixed80x77 payable) {} } // ---- // ParserError 9106: (56-63): State mutability can only be specified for address types. diff --git a/test/libsolidity/syntaxTests/types/too_small_negative_numbers.sol b/test/libsolidity/syntaxTests/types/too_small_negative_numbers.sol index 300e6ffca..08216d19e 100644 --- a/test/libsolidity/syntaxTests/types/too_small_negative_numbers.sol +++ b/test/libsolidity/syntaxTests/types/too_small_negative_numbers.sol @@ -1,5 +1,5 @@ contract C { - fixed8x80 a = -1e-100; + fixed8x77 a = -1e-100; } // ---- -// TypeError 7407: (29-36): Type rational_const -1 / 1000...(93 digits omitted)...0000 is not implicitly convertible to expected type fixed8x80. Conversion incurs precision loss. Use an explicit conversion instead. +// TypeError 7407: (29-36): Type rational_const -1 / 1000...(93 digits omitted)...0000 is not implicitly convertible to expected type fixed8x77. Conversion incurs precision loss. Use an explicit conversion instead.