2024-11-26 02:54:18 -06:00
|
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
pragma solidity ^0.8.26;
|
|
|
|
|
|
|
|
|
|
|
|
// L1
|
|
|
|
// \
|
|
|
|
// L2 L3 L1
|
|
|
|
// \ / /
|
|
|
|
// L4 /
|
|
|
|
// \ /
|
|
|
|
// C1
|
|
|
|
//
|
|
|
|
library L1 {
|
|
|
|
function Do(uint256 val) public pure returns (uint256) {
|
|
|
|
return uint256(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
library L2 {
|
|
|
|
function Do(uint256 val) public pure returns (uint256) {
|
2024-11-26 04:18:20 -06:00
|
|
|
return L1.Do(val) + uint256(1);
|
2024-11-26 02:54:18 -06:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
library L3 {
|
|
|
|
function Do(uint256 val) public pure returns (uint256) {
|
|
|
|
return uint256(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-11-26 04:18:20 -06:00
|
|
|
library L4 {
|
2024-11-26 02:54:18 -06:00
|
|
|
function Do(uint256 val) public pure returns (uint256) {
|
2024-11-26 04:18:20 -06:00
|
|
|
return L2.Do(uint256(val)) + L3.Do(uint256(val)) + uint256(1);
|
2024-11-26 02:54:18 -06:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
contract C1 {
|
|
|
|
function Do(uint256 val) public pure returns (uint256 res) {
|
2024-11-26 04:18:20 -06:00
|
|
|
return L4.Do(uint256(val)) + L1.Do(uint256(0)) + uint256(1);
|
2024-11-26 02:54:18 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
constructor(uint256 v1, uint256 v2) {
|
|
|
|
// do something with these
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// second contract+libraries: slightly different library deps than V1, but sharing several
|
|
|
|
// L1
|
|
|
|
// \
|
|
|
|
// L2b L3 L1
|
|
|
|
// \ / /
|
|
|
|
// L4b /
|
|
|
|
// \ /
|
|
|
|
// C2
|
|
|
|
//
|
|
|
|
library L4b {
|
|
|
|
function Do(uint256 val) public pure returns (uint256) {
|
|
|
|
return L2b.Do(uint256(val)) + uint256(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
library L2b {
|
|
|
|
function Do(uint256 val) public pure returns (uint256) {
|
|
|
|
return L1.Do(uint256(val)) + uint256(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
contract C2 {
|
|
|
|
function Do(uint256 val) public pure returns (uint256 res) {
|
|
|
|
return L4b.Do(uint256(val)) + L1.Do(uint256(0)) + uint256(1);
|
|
|
|
}
|
|
|
|
|
|
|
|
constructor(uint256 v1, uint256 v2) {
|
|
|
|
// do something with these
|
|
|
|
}
|
|
|
|
}
|