Function type state variables.

This commit is contained in:
chriseth
2016-11-16 14:37:17 +01:00
parent dd173f83e3
commit 97a3588701
4 changed files with 115 additions and 33 deletions
+27 -1
View File
@@ -7669,7 +7669,33 @@ BOOST_AUTO_TEST_CASE(pass_function_types_externally)
BOOST_CHECK(callContractFunction("f2(uint256)", 7) == encodeArgs(u256(8)));
}
// TODO: storage, arrays
BOOST_AUTO_TEST_CASE(store_function)
{
char const* sourceCode = R"(
contract Other {
function addTwo(uint x) returns (uint) { return x + 2; }
}
contract C {
function (unction (uint) external returns (uint)) returns (uint) ev = eval;
function (uint) external returns (uint) x;
function store(function(uint) external returns (uint) y) {
x = y;
}
function eval(function(uint) external returns (uint) y) returns (uint) {
return y(7);
}
function t() returns (uint) {
this.store((new Other()).addTwo);
return ev(x);
}
}
)";
compileAndRun(sourceCode, 0, "C");
BOOST_CHECK(callContractFunction("t()") == encodeArgs(u256(9)));
}
// TODO: public function state variables, arrays
BOOST_AUTO_TEST_CASE(shift_constant_left)
{
+20 -1
View File
@@ -1256,7 +1256,26 @@ BOOST_AUTO_TEST_CASE(function_type_in_expression)
BOOST_AUTO_TEST_CASE(function_type_as_storage_variable)
{
// TODO disambiguate from fallback function
char const* text = R"(
contract test {
function (uint, uint) internal returns (uint) f1;
}
)";
BOOST_CHECK(successParse(text));
}
BOOST_AUTO_TEST_CASE(function_type_as_storage_variable_with_modifiers)
{
char const* text = R"(
contract test {
function (uint, uint) modifier1() returns (uint) f1;
}
)";
BOOST_CHECK(!successParse(text));
}
BOOST_AUTO_TEST_CASE(function_type_as_storage_variable_with_assignment)
{
char const* text = R"(
contract test {
function f(uint x, uint y) returns (uint a) {}