mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge branch 'develop' of https://github.com/ethereum/cpp-ethereum into develop
This commit is contained in:
commit
e832fec8d5
@ -2479,6 +2479,42 @@ BOOST_AUTO_TEST_CASE(struct_copy)
|
||||
BOOST_CHECK(callContractFunction("retrieve(uint256)", 8) == encodeArgs(0, 0, 0, 0));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(struct_containing_bytes_copy_and_delete)
|
||||
{
|
||||
char const* sourceCode = R"(
|
||||
contract c {
|
||||
struct Struct { uint a; bytes data; uint b; }
|
||||
Struct data1;
|
||||
Struct data2;
|
||||
function set(uint _a, bytes _data, uint _b) external returns (bool) {
|
||||
data1.a = _a;
|
||||
data1.b = _b;
|
||||
data1.data = _data;
|
||||
return true;
|
||||
}
|
||||
function copy() returns (bool) {
|
||||
data1 = data2;
|
||||
return true;
|
||||
}
|
||||
function del() returns (bool) {
|
||||
delete data1;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
)";
|
||||
compileAndRun(sourceCode);
|
||||
string data = "123456789012345678901234567890123";
|
||||
BOOST_CHECK(m_state.storage(m_contractAddress).empty());
|
||||
BOOST_CHECK(callContractFunction("set(uint256,bytes,uint256)", u256(data.length()), 12, data, 13) == encodeArgs(true));
|
||||
BOOST_CHECK(!m_state.storage(m_contractAddress).empty());
|
||||
BOOST_CHECK(callContractFunction("copy()") == encodeArgs(true));
|
||||
BOOST_CHECK(m_state.storage(m_contractAddress).empty());
|
||||
BOOST_CHECK(callContractFunction("set(uint256,bytes,uint256)", u256(data.length()), 12, data, 13) == encodeArgs(true));
|
||||
BOOST_CHECK(!m_state.storage(m_contractAddress).empty());
|
||||
BOOST_CHECK(callContractFunction("del()") == encodeArgs(true));
|
||||
BOOST_CHECK(m_state.storage(m_contractAddress).empty());
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(struct_copy_via_local)
|
||||
{
|
||||
char const* sourceCode = R"(
|
||||
|
@ -470,7 +470,7 @@ BOOST_AUTO_TEST_CASE(illegal_override_indirect)
|
||||
BOOST_AUTO_TEST_CASE(illegal_override_visibility)
|
||||
{
|
||||
char const* text = R"(
|
||||
contract B { function f() protected {} }
|
||||
contract B { function f() inheritable {} }
|
||||
contract C is B { function f() public {} }
|
||||
)";
|
||||
BOOST_CHECK_THROW(parseTextAndResolveNames(text), TypeError);
|
||||
@ -706,7 +706,7 @@ BOOST_AUTO_TEST_CASE(private_state_variable)
|
||||
" uint64(2);\n"
|
||||
" }\n"
|
||||
"uint256 private foo;\n"
|
||||
"uint256 protected bar;\n"
|
||||
"uint256 inheritable bar;\n"
|
||||
"}\n";
|
||||
|
||||
ASTPointer<SourceUnit> source;
|
||||
@ -717,7 +717,7 @@ BOOST_AUTO_TEST_CASE(private_state_variable)
|
||||
function = retrieveFunctionBySignature(contract, "foo()");
|
||||
BOOST_CHECK_MESSAGE(function == nullptr, "Accessor function of a private variable should not exist");
|
||||
function = retrieveFunctionBySignature(contract, "bar()");
|
||||
BOOST_CHECK_MESSAGE(function == nullptr, "Accessor function of a protected variable should not exist");
|
||||
BOOST_CHECK_MESSAGE(function == nullptr, "Accessor function of an inheritable variable should not exist");
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(fallback_function)
|
||||
@ -832,11 +832,11 @@ BOOST_AUTO_TEST_CASE(access_to_default_function_visibility)
|
||||
BOOST_CHECK_NO_THROW(parseTextAndResolveNames(text));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(access_to_protected_function)
|
||||
BOOST_AUTO_TEST_CASE(access_to_inheritable_function)
|
||||
{
|
||||
char const* text = R"(
|
||||
contract c {
|
||||
function f() protected {}
|
||||
function f() inheritable {}
|
||||
}
|
||||
contract d {
|
||||
function g() { c(0).f(); }
|
||||
@ -856,7 +856,7 @@ BOOST_AUTO_TEST_CASE(access_to_default_state_variable_visibility)
|
||||
BOOST_CHECK_THROW(parseTextAndResolveNames(text), TypeError);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(access_to_protected_state_variable)
|
||||
BOOST_AUTO_TEST_CASE(access_to_inheritable_state_variable)
|
||||
{
|
||||
char const* text = R"(
|
||||
contract c {
|
||||
|
@ -651,13 +651,13 @@ BOOST_AUTO_TEST_CASE(visibility_specifiers)
|
||||
char const* text = R"(
|
||||
contract c {
|
||||
uint private a;
|
||||
uint protected b;
|
||||
uint inheritable b;
|
||||
uint public c;
|
||||
uint d;
|
||||
function f() {}
|
||||
function f_priv() private {}
|
||||
function f_public() public {}
|
||||
function f_protected() protected {}
|
||||
function f_inheritable() inheritable {}
|
||||
})";
|
||||
BOOST_CHECK_NO_THROW(parseText(text));
|
||||
}
|
||||
@ -666,7 +666,7 @@ BOOST_AUTO_TEST_CASE(multiple_visibility_specifiers)
|
||||
{
|
||||
char const* text = R"(
|
||||
contract c {
|
||||
uint private protected a;
|
||||
uint private inheritable a;
|
||||
})";
|
||||
BOOST_CHECK_THROW(parseText(text), ParserError);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user