[Sol -> Yul] Implement delete for function pointers

This commit is contained in:
Mathias Baumann
2019-05-23 15:51:59 +02:00
parent 81702717b0
commit 981983089c
8 changed files with 89 additions and 6 deletions
@@ -6,18 +6,24 @@ contract C {
return true;
}
function equal() public pure returns (bool same, bool diff) {
function equal() public pure returns (bool same, bool diff, bool inv) {
function() internal pure returns (bool) invalid;
delete invalid;
same = internal1 == internal1;
diff = internal1 == internal2;
inv = internal1 == invalid;
}
function unequal() public pure returns (bool same, bool diff) {
function unequal() public pure returns (bool same, bool diff, bool inv) {
function() internal pure returns (bool) invalid;
delete invalid;
same = internal1 != internal1;
diff = internal1 != internal2;
inv = internal1 != invalid;
}
}
// ====
// compileViaYul: true
// ----
// equal() -> true, false
// unequal() -> false, true
// equal() -> true, false, false
// unequal() -> false, true, true
@@ -0,0 +1,29 @@
contract C {
function internal_func() internal pure returns (int8)
{
return 1;
}
function call_internal_func() public pure returns (bool ret)
{
function() internal pure returns(int8) func = internal_func;
return func() == internal_func();
}
function call_deleted_internal_func() public pure returns (bool ret)
{
function() internal pure returns(int8) func = internal_func;
delete func;
return func() == internal_func();
}
function external_func() external pure returns (int8)
{
return 1;
}
}
// ====
// compileViaYul: true
// ----
// call_deleted_internal_func() -> FAILURE
// call_internal_func() -> true