mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #3981 from ethereum/years-suffix
The "year" denomination is deprecated
This commit is contained in:
commit
d1e1293fbd
@ -3,6 +3,7 @@
|
||||
Features:
|
||||
* Build System: Update internal dependency of jsoncpp to 1.8.4, which introduces more strictness and reduces memory usage.
|
||||
* Optimizer: Remove unnecessary masking of the result of known short instructions (``ADDRESS``, ``CALLER``, ``ORIGIN`` and ``COINBASE``).
|
||||
* Type Checker: Deprecate the ``years`` unit denomination and raise a warning for it (or an error as experimental 0.5.0 feature).
|
||||
* Type Checker: Make literals (without explicit type casting) an error for tight packing as experimental 0.5.0 feature.
|
||||
|
||||
Bugfixes:
|
||||
|
@ -2233,6 +2233,7 @@ void TypeChecker::endVisit(Literal const& _literal)
|
||||
"For more information please see https://solidity.readthedocs.io/en/develop/types.html#address-literals"
|
||||
);
|
||||
}
|
||||
|
||||
if (_literal.isHexNumber() && _literal.subDenomination() != Literal::SubDenomination::None)
|
||||
{
|
||||
if (v050)
|
||||
@ -2248,6 +2249,21 @@ void TypeChecker::endVisit(Literal const& _literal)
|
||||
"You can use an expression of the form \"0x1234 * 1 day\" instead."
|
||||
);
|
||||
}
|
||||
|
||||
if (_literal.subDenomination() == Literal::SubDenomination::Year)
|
||||
{
|
||||
if (v050)
|
||||
m_errorReporter.typeError(
|
||||
_literal.location(),
|
||||
"Using \"years\" as a unit denomination is deprecated."
|
||||
);
|
||||
else
|
||||
m_errorReporter.warning(
|
||||
_literal.location(),
|
||||
"Using \"years\" as a unit denomination is deprecated."
|
||||
);
|
||||
}
|
||||
|
||||
if (!_literal.annotation().type)
|
||||
_literal.annotation().type = Type::forLiteral(_literal);
|
||||
|
||||
|
@ -2278,25 +2278,6 @@ BOOST_AUTO_TEST_CASE(explicit_conversion_from_decimal_to_bytesxx)
|
||||
CHECK_SUCCESS_NO_WARNINGS(text);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(combining_hex_and_denomination)
|
||||
{
|
||||
char const* text = R"(
|
||||
contract Foo {
|
||||
uint constant x = 0x01 wei;
|
||||
}
|
||||
)";
|
||||
CHECK_WARNING(text, "Hexadecimal numbers with unit denominations are deprecated.");
|
||||
|
||||
char const* textV050 = R"(
|
||||
pragma experimental "v0.5.0";
|
||||
|
||||
contract Foo {
|
||||
uint constant x = 0x01 wei;
|
||||
}
|
||||
)";
|
||||
CHECK_ERROR(textV050, TypeError, "Hexadecimal numbers cannot be used with unit denominations.");
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(assigning_value_to_const_variable)
|
||||
{
|
||||
char const* text = R"(
|
||||
|
@ -0,0 +1,5 @@
|
||||
contract C {
|
||||
uint constant x = 0x01 wei;
|
||||
}
|
||||
// ----
|
||||
// Warning: (32-40): Hexadecimal numbers with unit denominations are deprecated. You can use an expression of the form "0x1234 * 1 day" instead.
|
@ -0,0 +1,6 @@
|
||||
pragma experimental "v0.5.0";
|
||||
contract C {
|
||||
uint constant x = 0x01 wei;
|
||||
}
|
||||
// ----
|
||||
// TypeError: (62-70): Hexadecimal numbers cannot be used with unit denominations. You can use an expression of the form "0x1234 * 1 day" instead.
|
@ -0,0 +1,7 @@
|
||||
contract C {
|
||||
uint constant a = 1 wei + 2 szabo + 3 finney + 4 ether;
|
||||
uint constant b = 1 seconds + 2 minutes + 3 hours + 4 days + 5 weeks + 6 years;
|
||||
uint constant c = 2 szabo / 1 seconds + 3 finney * 3 hours;
|
||||
}
|
||||
// ----
|
||||
// Warning: (142-149): Using "years" as a unit denomination is deprecated.
|
@ -0,0 +1,5 @@
|
||||
contract C {
|
||||
uint constant a = 3 years;
|
||||
}
|
||||
// ----
|
||||
// Warning: (32-39): Using "years" as a unit denomination is deprecated.
|
@ -0,0 +1,6 @@
|
||||
pragma experimental "v0.5.0";
|
||||
contract C {
|
||||
uint constant a = 3 years;
|
||||
}
|
||||
// ----
|
||||
// TypeError: (62-69): Using "years" as a unit denomination is deprecated.
|
@ -0,0 +1,6 @@
|
||||
contract C {
|
||||
uint constant a = 4 ether / 3 hours;
|
||||
ufixed constant b = ufixed(4 ether / 3 hours);
|
||||
}
|
||||
// ----
|
||||
// TypeError: (32-49): Type rational_const 10000000000000000 / 27 is not implicitly convertible to expected type uint256. Try converting to type ufixed256x62 or use an explicit conversion.
|
Loading…
Reference in New Issue
Block a user