New tests for function state variables.

This commit is contained in:
chriseth 2018-03-16 11:45:18 +01:00
parent 6d289783b4
commit 42b90ad4c3
6 changed files with 61 additions and 0 deletions

View File

@ -0,0 +1,11 @@
contract C {
function (uint) external public x;
function g(uint) public {
x = this.g;
}
function f() public view returns (function(uint) external) {
return this.x();
}
}
// ----

View File

@ -0,0 +1,5 @@
contract C {
function(bytes memory) internal public a;
}
// ----
// TypeError: (17-57): Internal or recursive type is not allowed for public state variables.

View File

@ -0,0 +1,6 @@
contract test {
function fa(bytes memory) { }
function(bytes memory) external internal a = fa;
}
// ----
// TypeError: (99-101): Type function (bytes memory) is not implicitly convertible to expected type function (bytes memory) external.

View File

@ -0,0 +1,7 @@
contract C {
// This is an error, you should explicitly use
// `external public` to fix it - `internal public` does not exist.
function(bytes memory) public a;
}
// ----
// TypeError: (139-170): Invalid visibility, can only be "external" or "internal".

View File

@ -0,0 +1,9 @@
contract C {
function(bytes memory) a1;
function(bytes memory) internal b1;
function(bytes memory) internal internal b2;
function(bytes memory) external c1;
function(bytes memory) external internal c2;
function(bytes memory) external public c3;
}
// ----

View File

@ -0,0 +1,23 @@
contract test {
function fa(uint) {}
function fb(uint) internal {}
function fc(uint) internal {}
function fd(uint) external {}
function fe(uint) external {}
function ff(uint) internal {}
function fg(uint) internal pure {}
function fh(uint) pure internal {}
function(uint) a = fa;
function(uint) internal b = fb; // (explicit internal applies to the function type)
function(uint) internal internal c = fc;
function(uint) external d = this.fd;
function(uint) external internal e = this.fe;
function(uint) internal public f = ff;
function(uint) internal pure public g = fg;
function(uint) pure internal public h = fh;
}
// ----
// TypeError: (545-582): Internal or recursive type is not allowed for public state variables.
// TypeError: (588-630): Internal or recursive type is not allowed for public state variables.
// TypeError: (636-678): Internal or recursive type is not allowed for public state variables.