mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Some more scoping tests.
This commit is contained in:
parent
6391a36a6c
commit
d64aa0eaad
@ -298,10 +298,38 @@ BOOST_AUTO_TEST_CASE(C99_scoping_activation)
|
|||||||
}
|
}
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
function g() pure public returns (uint x) {
|
||||||
|
x = 7;
|
||||||
|
{
|
||||||
|
x = 3;
|
||||||
|
uint x;
|
||||||
|
return x; // This returns the new variable, i.e. 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function h() pure public returns (uint x, uint a, uint b) {
|
||||||
|
x = 7;
|
||||||
|
{
|
||||||
|
x = 3;
|
||||||
|
a = x; // This should read from the outer
|
||||||
|
uint x = 4;
|
||||||
|
b = x;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function i() pure public returns (uint x, uint a) {
|
||||||
|
x = 7;
|
||||||
|
{
|
||||||
|
x = 3;
|
||||||
|
uint x = x; // This should read from the outer and assign to the inner
|
||||||
|
a = x;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
)";
|
)";
|
||||||
compileAndRun(sourceCode);
|
compileAndRun(sourceCode);
|
||||||
ABI_CHECK(callContractFunction("f()"), encodeArgs(3));
|
ABI_CHECK(callContractFunction("f()"), encodeArgs(3));
|
||||||
|
ABI_CHECK(callContractFunction("g()"), encodeArgs(0));
|
||||||
|
ABI_CHECK(callContractFunction("h()"), encodeArgs(3, 3, 4));
|
||||||
|
ABI_CHECK(callContractFunction("i()"), encodeArgs(3, 3));
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(recursive_calls)
|
BOOST_AUTO_TEST_CASE(recursive_calls)
|
||||||
|
@ -106,6 +106,67 @@ BOOST_AUTO_TEST_CASE(double_variable_declaration_050)
|
|||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(double_variable_declaration_disjoint_scope)
|
||||||
|
{
|
||||||
|
string text = R"(
|
||||||
|
contract test {
|
||||||
|
function f() pure public {
|
||||||
|
{ uint x; }
|
||||||
|
{ uint x; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)";
|
||||||
|
CHECK_ERROR(text, DeclarationError, "Identifier already declared");
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(double_variable_declaration_disjoint_scope_050)
|
||||||
|
{
|
||||||
|
string text = R"(
|
||||||
|
pragma experimental "v0.5.0";
|
||||||
|
contract test {
|
||||||
|
function f() pure public {
|
||||||
|
{ uint x; }
|
||||||
|
{ uint x; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)";
|
||||||
|
CHECK_WARNING_ALLOW_MULTI(text, (vector<string>{
|
||||||
|
"Experimental features",
|
||||||
|
"Unused local variable",
|
||||||
|
"Unused local variable"
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(double_variable_declaration_disjoint_scope_activation)
|
||||||
|
{
|
||||||
|
string text = R"(
|
||||||
|
contract test {
|
||||||
|
function f() pure public {
|
||||||
|
{ uint x; }
|
||||||
|
uint x;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)";
|
||||||
|
CHECK_ERROR(text, DeclarationError, "Identifier already declared");
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(double_variable_declaration_disjoint_scope_activation_050)
|
||||||
|
{
|
||||||
|
string text = R"(
|
||||||
|
pragma experimental "v0.5.0";
|
||||||
|
contract test {
|
||||||
|
function f() pure public {
|
||||||
|
{ uint x; }
|
||||||
|
uint x;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)";
|
||||||
|
CHECK_WARNING_ALLOW_MULTI(text, (vector<string>{
|
||||||
|
"Experimental features",
|
||||||
|
"Unused local variable",
|
||||||
|
"Unused local variable"
|
||||||
|
}));
|
||||||
|
}
|
||||||
BOOST_AUTO_TEST_CASE(scoping_old)
|
BOOST_AUTO_TEST_CASE(scoping_old)
|
||||||
{
|
{
|
||||||
char const* text = R"(
|
char const* text = R"(
|
||||||
@ -163,11 +224,23 @@ BOOST_AUTO_TEST_CASE(scoping_activation)
|
|||||||
}
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(scoping_self_use)
|
BOOST_AUTO_TEST_CASE(scoping_self_use)
|
||||||
|
{
|
||||||
|
char const* text = R"(
|
||||||
|
contract test {
|
||||||
|
function f() pure public {
|
||||||
|
uint a = a;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)";
|
||||||
|
CHECK_SUCCESS_NO_WARNINGS(text);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(scoping_self_use_050)
|
||||||
{
|
{
|
||||||
char const* text = R"(
|
char const* text = R"(
|
||||||
pragma experimental "v0.5.0";
|
pragma experimental "v0.5.0";
|
||||||
contract test {
|
contract test {
|
||||||
function f() public {
|
function f() pure public {
|
||||||
uint a = a;
|
uint a = a;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user