The "year" denomination is deprecated

This commit is contained in:
Alex Beregszaszi 2018-04-23 14:54:45 +01:00
parent 75faed7c55
commit 1ac0090f31
5 changed files with 30 additions and 0 deletions

View File

@ -3,6 +3,7 @@
Features: Features:
* Build System: Update internal dependency of jsoncpp to 1.8.4, which introduces more strictness and reduces memory usage. * 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``). * 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. * Type Checker: Make literals (without explicit type casting) an error for tight packing as experimental 0.5.0 feature.
Bugfixes: Bugfixes:

View File

@ -2220,6 +2220,7 @@ void TypeChecker::endVisit(Literal const& _literal)
"For more information please see https://solidity.readthedocs.io/en/develop/types.html#address-literals" "For more information please see https://solidity.readthedocs.io/en/develop/types.html#address-literals"
); );
} }
if (_literal.isHexNumber() && _literal.subDenomination() != Literal::SubDenomination::None) if (_literal.isHexNumber() && _literal.subDenomination() != Literal::SubDenomination::None)
{ {
if (v050) if (v050)
@ -2235,6 +2236,21 @@ void TypeChecker::endVisit(Literal const& _literal)
"You can use an expression of the form \"0x1234 * 1 day\" instead." "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) if (!_literal.annotation().type)
_literal.annotation().type = Type::forLiteral(_literal); _literal.annotation().type = Type::forLiteral(_literal);

View File

@ -3,3 +3,5 @@ contract C {
uint constant b = 1 seconds + 2 minutes + 3 hours + 4 days + 5 weeks + 6 years; 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; uint constant c = 2 szabo / 1 seconds + 3 finney * 3 hours;
} }
// ----
// Warning: (142-149): Using "years" as a unit denomination is deprecated.

View File

@ -0,0 +1,5 @@
contract C {
uint constant a = 3 years;
}
// ----
// Warning: (32-39): Using "years" as a unit denomination is deprecated.

View File

@ -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.