Merge pull request #6814 from ethereum/yul-delete-operation

[Sol -> Yul] Implement delete for function pointers
This commit is contained in:
chriseth
2019-05-23 16:27:14 +02:00
committed by GitHub
8 changed files with 114 additions and 3 deletions
@@ -0,0 +1,29 @@
contract C {
function internal1() internal pure returns (bool) {
return true;
}
function internal2() internal pure returns (bool) {
return true;
}
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, bool inv) {
function() internal pure returns (bool) invalid;
delete invalid;
same = internal1 != internal1;
diff = internal1 != internal2;
inv = internal1 != invalid;
}
}
// ====
// compileViaYul: 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