mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
[Sol -> Yul] Implement delete for function pointers
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user