mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			57 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Solidity
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Solidity
		
	
	
	
	
	
library L {
 | 
						|
    function f(uint256 v) external pure returns (uint) {
 | 
						|
        return v * v;
 | 
						|
    }
 | 
						|
    function g(uint256 v) external returns (uint) {
 | 
						|
        return v * v;
 | 
						|
    }
 | 
						|
}
 | 
						|
contract C {
 | 
						|
    function addr() public view returns (bool) {
 | 
						|
        return address(L) == address(0);
 | 
						|
    }
 | 
						|
    function g(uint256 v) public view returns (uint256) {
 | 
						|
        return L.f(v);
 | 
						|
    }
 | 
						|
    function h(uint256 v) public returns (uint256) {
 | 
						|
        (bool success, bytes memory result) = address(L).delegatecall(abi.encodeWithSignature("f(uint256)", v));
 | 
						|
        assert(success);
 | 
						|
        return abi.decode(result, (uint256));
 | 
						|
    }
 | 
						|
    function i(uint256 v) public returns (uint256) {
 | 
						|
        (bool success, bytes memory result) = address(L).call(abi.encodeWithSignature("f(uint256)", v));
 | 
						|
        assert(success);
 | 
						|
        return abi.decode(result, (uint256));
 | 
						|
    }
 | 
						|
    function j(uint256 v) public returns (uint256) {
 | 
						|
        (bool success, bytes memory result) = address(L).delegatecall(abi.encodeWithSignature("g(uint256)", v));
 | 
						|
        assert(success);
 | 
						|
        return abi.decode(result, (uint256));
 | 
						|
    }
 | 
						|
    function k(uint256 v) public returns (uint256) {
 | 
						|
        (bool success, bytes memory result) = address(L).call(abi.encodeWithSignature("g(uint256)", v));
 | 
						|
        assert(success);
 | 
						|
        return abi.decode(result, (uint256));
 | 
						|
    }
 | 
						|
}
 | 
						|
// ====
 | 
						|
// EVMVersion: >=byzantium
 | 
						|
// ----
 | 
						|
// library: L
 | 
						|
// addr() -> false
 | 
						|
// g(uint256): 1 -> 1
 | 
						|
// g(uint256): 2 -> 4
 | 
						|
// g(uint256): 4 -> 16
 | 
						|
// h(uint256): 1 -> 1
 | 
						|
// h(uint256): 2 -> 4
 | 
						|
// h(uint256): 4 -> 16
 | 
						|
// i(uint256): 1 -> 1
 | 
						|
// i(uint256): 2 -> 4
 | 
						|
// i(uint256): 4 -> 16
 | 
						|
// j(uint256): 1 -> 1
 | 
						|
// j(uint256): 2 -> 4
 | 
						|
// j(uint256): 4 -> 16
 | 
						|
// k(uint256): 1 -> FAILURE
 | 
						|
// k(uint256): 2 -> FAILURE
 | 
						|
// k(uint256): 4 -> FAILURE
 |