mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Destructuring assignments.
This commit is contained in:
@@ -5693,14 +5693,14 @@ BOOST_AUTO_TEST_CASE(tuples)
|
||||
data[0] = 3;
|
||||
uint a; uint b;
|
||||
(a, b) = this.h();
|
||||
if (a != 1 || b != 2) return 1;
|
||||
if (a != 5 || b != 6) return 1;
|
||||
uint[] storage c;
|
||||
(a, b, c) = g();
|
||||
if (a != 5 || b != 6 || c[0] != 3) return 2;
|
||||
if (a != 1 || b != 2 || c[0] != 3) return 2;
|
||||
(a, b) = (b, a);
|
||||
if (a != 6 || b != 5) return 3;
|
||||
(a, , b, ) = (8, 9, 10, 11, 12);
|
||||
if (a != 8 || b != 10) return 3;
|
||||
if (a != 2 || b != 1) return 3;
|
||||
// (a, , b, ) = (8, 9, 10, 11, 12);
|
||||
// if (a != 8 || b != 10) return 3;
|
||||
}
|
||||
}
|
||||
)";
|
||||
@@ -5708,6 +5708,42 @@ BOOST_AUTO_TEST_CASE(tuples)
|
||||
BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(0)));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(destructuring_assignment)
|
||||
{
|
||||
char const* sourceCode = R"(
|
||||
contract C {
|
||||
uint x = 7;
|
||||
bytes data;
|
||||
uint[] y;
|
||||
uint[] arrayData;
|
||||
function returnsArray() returns (uint[]) {
|
||||
arrayData.length = 9;
|
||||
arrayData[2] = 5;
|
||||
arrayData[7] = 4;
|
||||
return arrayData;
|
||||
}
|
||||
function f(bytes s) returns (uint) {
|
||||
uint loc;
|
||||
uint[] memArray;
|
||||
(loc, x, y, data, arrayData[3]) = (8, 4, returnsArray(), s, 2);
|
||||
if (loc != 8) return 1;
|
||||
if (x != 4) return 2;
|
||||
if (y.length != 9) return 3;
|
||||
if (y[2] != 5) return 4;
|
||||
if (y[7] != 4) return 5;
|
||||
if (data.length != s.length) return 6;
|
||||
if (data[3] != s[3]) return 7;
|
||||
if (arrayData[3] != 2) return 8;
|
||||
(memArray, loc) = (arrayData, 3);
|
||||
if (loc != 3) return 9;
|
||||
if (memArray.length != arrayData.length) return 10;
|
||||
}
|
||||
}
|
||||
)";
|
||||
compileAndRun(sourceCode);
|
||||
BOOST_CHECK(callContractFunction("f(bytes)", u256(0x20), u256(5), string("abcde")) == encodeArgs(u256(0)));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(destructuring_assignment_wildcard)
|
||||
{
|
||||
char const* sourceCode = R"(
|
||||
@@ -5732,6 +5768,7 @@ BOOST_AUTO_TEST_CASE(destructuring_assignment_wildcard)
|
||||
compileAndRun(sourceCode);
|
||||
BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(0)));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user