mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #3425 from jevogel/3301
Deprecate the var keyword in SyntaxChecker
This commit is contained in:
commit
729c6a95f8
@ -9,6 +9,7 @@ Features:
|
|||||||
* Inline Assembly: Support some restricted tokens (return, byte, address) as identifiers in Julia mode.
|
* Inline Assembly: Support some restricted tokens (return, byte, address) as identifiers in Julia mode.
|
||||||
* SMT Checker: If-else branch conditions are taken into account in the SMT encoding of the program
|
* SMT Checker: If-else branch conditions are taken into account in the SMT encoding of the program
|
||||||
variables.
|
variables.
|
||||||
|
* Syntax Checker: Deprecate the ``var`` keyword (and mark it an error as experimental 0.5.0 feature).
|
||||||
* Type Checker: Issue warning for using ``public`` visibility for interface functions.
|
* Type Checker: Issue warning for using ``public`` visibility for interface functions.
|
||||||
|
|
||||||
Bugfixes:
|
Bugfixes:
|
||||||
|
@ -224,3 +224,17 @@ bool SyntaxChecker::visit(FunctionTypeName const& _node)
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool SyntaxChecker::visit(VariableDeclaration const& _declaration)
|
||||||
|
{
|
||||||
|
bool const v050 = m_sourceUnit->annotation().experimentalFeatures.count(ExperimentalFeature::V050);
|
||||||
|
|
||||||
|
if (!_declaration.typeName())
|
||||||
|
{
|
||||||
|
if (v050)
|
||||||
|
m_errorReporter.syntaxError(_declaration.location(), "Use of the \"var\" keyword is deprecated.");
|
||||||
|
else
|
||||||
|
m_errorReporter.warning(_declaration.location(), "Use of the \"var\" keyword is deprecated.");
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
@ -69,6 +69,8 @@ private:
|
|||||||
virtual bool visit(FunctionDefinition const& _function) override;
|
virtual bool visit(FunctionDefinition const& _function) override;
|
||||||
virtual bool visit(FunctionTypeName const& _node) override;
|
virtual bool visit(FunctionTypeName const& _node) override;
|
||||||
|
|
||||||
|
virtual bool visit(VariableDeclaration const& _declaration) override;
|
||||||
|
|
||||||
ErrorReporter& m_errorReporter;
|
ErrorReporter& m_errorReporter;
|
||||||
|
|
||||||
/// Flag that indicates whether a function modifier actually contains '_'.
|
/// Flag that indicates whether a function modifier actually contains '_'.
|
||||||
|
@ -1844,7 +1844,10 @@ BOOST_AUTO_TEST_CASE(warn_var_from_zero)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
)";
|
)";
|
||||||
CHECK_WARNING(sourceCode, "uint8, which can hold values between 0 and 255");
|
CHECK_WARNING_ALLOW_MULTI(sourceCode, (std::vector<std::string>{
|
||||||
|
"uint8, which can hold values between 0 and 255",
|
||||||
|
"Use of the \"var\" keyword is deprecated."
|
||||||
|
}));
|
||||||
sourceCode = R"(
|
sourceCode = R"(
|
||||||
contract test {
|
contract test {
|
||||||
function f() pure public {
|
function f() pure public {
|
||||||
@ -1853,7 +1856,10 @@ BOOST_AUTO_TEST_CASE(warn_var_from_zero)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
)";
|
)";
|
||||||
CHECK_WARNING(sourceCode, "uint256, which can hold values between 0 and 115792089237316195423570985008687907853269984665640564039457584007913129639935");
|
CHECK_WARNING_ALLOW_MULTI(sourceCode, (std::vector<std::string>{
|
||||||
|
"uint256, which can hold values between 0 and 115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||||
|
"Use of the \"var\" keyword is deprecated."
|
||||||
|
}));
|
||||||
sourceCode = R"(
|
sourceCode = R"(
|
||||||
contract test {
|
contract test {
|
||||||
function f() pure public {
|
function f() pure public {
|
||||||
@ -1862,7 +1868,10 @@ BOOST_AUTO_TEST_CASE(warn_var_from_zero)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
)";
|
)";
|
||||||
CHECK_WARNING(sourceCode, "int8, which can hold values between -128 and 127");
|
CHECK_WARNING_ALLOW_MULTI(sourceCode, (std::vector<std::string>{
|
||||||
|
"int8, which can hold values between -128 and 127",
|
||||||
|
"Use of the \"var\" keyword is deprecated."
|
||||||
|
}));
|
||||||
sourceCode = R"(
|
sourceCode = R"(
|
||||||
contract test {
|
contract test {
|
||||||
function f() pure public {
|
function f() pure public {
|
||||||
@ -1870,7 +1879,10 @@ BOOST_AUTO_TEST_CASE(warn_var_from_zero)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
)";
|
)";
|
||||||
CHECK_WARNING(sourceCode, "uint8, which can hold");
|
CHECK_WARNING_ALLOW_MULTI(sourceCode, (std::vector<std::string>{
|
||||||
|
"uint8, which can hold",
|
||||||
|
"Use of the \"var\" keyword is deprecated."
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(enum_member_access)
|
BOOST_AUTO_TEST_CASE(enum_member_access)
|
||||||
@ -4887,8 +4899,7 @@ BOOST_AUTO_TEST_CASE(warn_about_callcode)
|
|||||||
char const* text = R"(
|
char const* text = R"(
|
||||||
contract test {
|
contract test {
|
||||||
function f() pure public {
|
function f() pure public {
|
||||||
var x = address(0x12).callcode;
|
address(0x12).callcode;
|
||||||
x;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)";
|
)";
|
||||||
@ -4897,8 +4908,7 @@ BOOST_AUTO_TEST_CASE(warn_about_callcode)
|
|||||||
pragma experimental "v0.5.0";
|
pragma experimental "v0.5.0";
|
||||||
contract test {
|
contract test {
|
||||||
function f() pure public {
|
function f() pure public {
|
||||||
var x = address(0x12).callcode;
|
address(0x12).callcode;
|
||||||
x;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)";
|
)";
|
||||||
@ -6918,7 +6928,7 @@ BOOST_AUTO_TEST_CASE(function_types_sig)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
)";
|
)";
|
||||||
CHECK_SUCCESS_NO_WARNINGS(text);
|
CHECK_WARNING(text, "Use of the \"var\" keyword is deprecated.");
|
||||||
text = R"(
|
text = R"(
|
||||||
contract C {
|
contract C {
|
||||||
function h() pure external {
|
function h() pure external {
|
||||||
@ -6941,7 +6951,7 @@ BOOST_AUTO_TEST_CASE(function_types_sig)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
)";
|
)";
|
||||||
CHECK_SUCCESS_NO_WARNINGS(text);
|
CHECK_WARNING(text, "Use of the \"var\" keyword is deprecated.");
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(using_this_in_constructor)
|
BOOST_AUTO_TEST_CASE(using_this_in_constructor)
|
||||||
@ -7349,7 +7359,7 @@ BOOST_AUTO_TEST_CASE(warn_about_sha3)
|
|||||||
char const* text = R"(
|
char const* text = R"(
|
||||||
contract test {
|
contract test {
|
||||||
function f() pure public {
|
function f() pure public {
|
||||||
var x = sha3(uint8(1));
|
bytes32 x = sha3(uint8(1));
|
||||||
x;
|
x;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -136,10 +136,12 @@ BOOST_AUTO_TEST_CASE(environment_access)
|
|||||||
}
|
}
|
||||||
for (string const& x: pure)
|
for (string const& x: pure)
|
||||||
{
|
{
|
||||||
CHECK_WARNING(
|
CHECK_WARNING_ALLOW_MULTI(
|
||||||
"contract C { function f() view public { var x = " + x + "; x; } }",
|
"contract C { function f() view public { var x = " + x + "; x; } }",
|
||||||
"restricted to pure"
|
(std::vector<std::string>{
|
||||||
);
|
"Function state mutability can be restricted to pure",
|
||||||
|
"Use of the \"var\" keyword is deprecated."
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -282,9 +284,9 @@ BOOST_AUTO_TEST_CASE(builtin_functions)
|
|||||||
require(this.call());
|
require(this.call());
|
||||||
}
|
}
|
||||||
function g() pure public {
|
function g() pure public {
|
||||||
var x = keccak256("abc");
|
bytes32 x = keccak256("abc");
|
||||||
var y = sha256("abc");
|
bytes32 y = sha256("abc");
|
||||||
var z = ecrecover(1, 2, 3, 4);
|
address z = ecrecover(1, 2, 3, 4);
|
||||||
require(true);
|
require(true);
|
||||||
assert(true);
|
assert(true);
|
||||||
x; y; z;
|
x; y; z;
|
||||||
|
Loading…
Reference in New Issue
Block a user