diff options
author | Yoichi Hirai <i@yoichihirai.com> | 2016-10-14 23:32:13 +0800 |
---|---|---|
committer | chriseth <c@ethdev.com> | 2016-11-16 21:37:17 +0800 |
commit | ab3d1b024db6e208e4b63e2ecb07754af1540d6f (patch) | |
tree | 0aa0fdb5050e6426ef2e10dacb6dada0ba00f29c | |
parent | 95d7555e3c0e8fc4826114a336e0e717fe7a1a2d (diff) | |
download | dexon-solidity-ab3d1b024db6e208e4b63e2ecb07754af1540d6f.tar dexon-solidity-ab3d1b024db6e208e4b63e2ecb07754af1540d6f.tar.gz dexon-solidity-ab3d1b024db6e208e4b63e2ecb07754af1540d6f.tar.bz2 dexon-solidity-ab3d1b024db6e208e4b63e2ecb07754af1540d6f.tar.lz dexon-solidity-ab3d1b024db6e208e4b63e2ecb07754af1540d6f.tar.xz dexon-solidity-ab3d1b024db6e208e4b63e2ecb07754af1540d6f.tar.zst dexon-solidity-ab3d1b024db6e208e4b63e2ecb07754af1540d6f.zip |
Add tests around calling functions returning functions returning functions
-rw-r--r-- | test/libsolidity/SolidityEndToEndTest.cpp | 30 | ||||
-rw-r--r-- | test/libsolidity/SolidityParser.cpp | 15 |
2 files changed, 45 insertions, 0 deletions
diff --git a/test/libsolidity/SolidityEndToEndTest.cpp b/test/libsolidity/SolidityEndToEndTest.cpp index b1529f8f..79dfd90e 100644 --- a/test/libsolidity/SolidityEndToEndTest.cpp +++ b/test/libsolidity/SolidityEndToEndTest.cpp @@ -7721,6 +7721,36 @@ BOOST_AUTO_TEST_CASE(function_type_library_internal) } +BOOST_AUTO_TEST_CASE(call_function_returning_function) +{ + char const* sourceCode = R"( + contract test { + function f0() returns (uint) { + return 2; + } + function f1() returns (function() returns (uint)) { + returns f0; + } + function f2() returns (function() returns (function () returns (uint))) { + returns f1; + } + function f3() returns (function() returns (function () returns (function () returns (uint)))) + { + returns f2; + } + function f() returns (uint) { + function() returns(function() returns(function() returns(function() returns(uint)))) x; + x = f3; + return x()()()(); + } + } + )"; + + compileAndRun(sourceCode, 0, "C"); + BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(2))); +} + + // TODO: arrays, libraries with external functions BOOST_AUTO_TEST_CASE(shift_constant_left) diff --git a/test/libsolidity/SolidityParser.cpp b/test/libsolidity/SolidityParser.cpp index 496f4703..d8c6fa10 100644 --- a/test/libsolidity/SolidityParser.cpp +++ b/test/libsolidity/SolidityParser.cpp @@ -1311,6 +1311,21 @@ BOOST_AUTO_TEST_CASE(function_type_as_parameter) BOOST_CHECK(successParse(text)); } +BOOST_AUTO_TEST_CASE(calling_function) +{ + char const* text = R"( + contract test { + function f() { + function() returns(function() returns(function() returns(function() returns(uint)))) x; + uint y; + y = x()()()(); + } + } + )"; + BOOST_CHECK(successParse(text)); +} + + BOOST_AUTO_TEST_SUITE_END() } |