aboutsummaryrefslogtreecommitdiffstats
path: root/test/libsolidity/SolidityNameAndTypeResolution.cpp
diff options
context:
space:
mode:
authorAlex Beregszaszi <alex@rtfs.hu>2017-09-14 00:35:48 +0800
committerGitHub <noreply@github.com>2017-09-14 00:35:48 +0800
commit5c9dbd50839ac153f367ce69abb10dd22877842e (patch)
tree98e3b524aaacdafb2c30feb04567159591bad562 /test/libsolidity/SolidityNameAndTypeResolution.cpp
parent3f3bcc4f8a0d12e9b92d6b63e7cfd92cbbfa775d (diff)
parent8b166c36369d0d1b39a4c537bc6ee8a08f3c6e5a (diff)
downloaddexon-solidity-5c9dbd50839ac153f367ce69abb10dd22877842e.tar
dexon-solidity-5c9dbd50839ac153f367ce69abb10dd22877842e.tar.gz
dexon-solidity-5c9dbd50839ac153f367ce69abb10dd22877842e.tar.bz2
dexon-solidity-5c9dbd50839ac153f367ce69abb10dd22877842e.tar.lz
dexon-solidity-5c9dbd50839ac153f367ce69abb10dd22877842e.tar.xz
dexon-solidity-5c9dbd50839ac153f367ce69abb10dd22877842e.tar.zst
dexon-solidity-5c9dbd50839ac153f367ce69abb10dd22877842e.zip
Merge pull request #2473 from ethereum/functiontype-sig
Add .selector member on function types
Diffstat (limited to 'test/libsolidity/SolidityNameAndTypeResolution.cpp')
-rw-r--r--test/libsolidity/SolidityNameAndTypeResolution.cpp81
1 files changed, 81 insertions, 0 deletions
diff --git a/test/libsolidity/SolidityNameAndTypeResolution.cpp b/test/libsolidity/SolidityNameAndTypeResolution.cpp
index 04d3d2d3..d3c9802b 100644
--- a/test/libsolidity/SolidityNameAndTypeResolution.cpp
+++ b/test/libsolidity/SolidityNameAndTypeResolution.cpp
@@ -6285,6 +6285,87 @@ BOOST_AUTO_TEST_CASE(modifiers_access_storage_pointer)
CHECK_SUCCESS_NO_WARNINGS(text);
}
+BOOST_AUTO_TEST_CASE(function_types_sig)
+{
+ char const* text = R"(
+ contract C {
+ function f() returns (bytes4) {
+ return f.selector;
+ }
+ }
+ )";
+ CHECK_ERROR(text, TypeError, "Member \"selector\" not found");
+ text = R"(
+ contract C {
+ function g() internal {
+ }
+ function f() returns (bytes4) {
+ return g.selector;
+ }
+ }
+ )";
+ CHECK_ERROR(text, TypeError, "Member \"selector\" not found");
+ text = R"(
+ contract C {
+ function f() returns (bytes4) {
+ function () g;
+ return g.selector;
+ }
+ }
+ )";
+ CHECK_ERROR(text, TypeError, "Member \"selector\" not found");
+ text = R"(
+ contract C {
+ function f() returns (bytes4) {
+ return this.f.selector;
+ }
+ }
+ )";
+ CHECK_SUCCESS_NO_WARNINGS(text);
+ text = R"(
+ contract C {
+ function f() external returns (bytes4) {
+ return this.f.selector;
+ }
+ }
+ )";
+ CHECK_SUCCESS_NO_WARNINGS(text);
+ text = R"(
+ contract C {
+ function h() external {
+ }
+ function f() external returns (bytes4) {
+ var g = this.h;
+ return g.selector;
+ }
+ }
+ )";
+ CHECK_SUCCESS_NO_WARNINGS(text);
+ text = R"(
+ contract C {
+ function h() external {
+ }
+ function f() external returns (bytes4) {
+ function () external g = this.h;
+ return g.selector;
+ }
+ }
+ )";
+ CHECK_SUCCESS_NO_WARNINGS(text);
+ text = R"(
+ contract C {
+ function h() external {
+ }
+ function f() external returns (bytes4) {
+ function () external g = this.h;
+ var i = g;
+ return i.selector;
+ }
+ }
+ )";
+ CHECK_SUCCESS_NO_WARNINGS(text);
+}
+
BOOST_AUTO_TEST_CASE(using_this_in_constructor)
{
char const* text = R"(