solidity/test/libsolidity/semanticTests/interface_inheritance_conversions.sol

47 lines
1.1 KiB
Solidity
Raw Normal View History

2020-01-02 21:28:07 +00:00
interface Parent {
function parentFun() external returns (uint256);
}
interface SubA is Parent {
function subAFun() external returns (uint256);
}
interface SubB is Parent {
function subBFun() external returns (uint256);
}
contract Impl is SubA, SubB {
function parentFun() override external returns (uint256) { return 1; }
function subAFun() override external returns (uint256) { return 2; }
function subBFun() override external returns (uint256) { return 3; }
}
contract C {
function convertParent() public returns (uint256) {
Parent p = new Impl();
return p.parentFun();
}
function convertSubA() public returns (uint256, uint256) {
SubA sa = new Impl();
return (sa.parentFun(), sa.subAFun());
}
function convertSubB() public returns (uint256, uint256) {
SubB sb = new Impl();
return (sb.parentFun(), sb.subBFun());
}
}
// ====
// compileViaYul: also
2020-01-02 21:28:07 +00:00
// ----
// convertParent() -> 1
2021-02-12 12:45:15 +00:00
// gas irOptimized: 122356
2020-01-02 21:28:07 +00:00
// convertSubA() -> 1, 2
2021-02-12 12:45:15 +00:00
// gas irOptimized: 124555
// gas legacy: 101703
2020-01-02 21:28:07 +00:00
// convertSubB() -> 1, 3
2021-02-12 12:45:15 +00:00
// gas irOptimized: 124489
// gas legacy: 101637