mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
New tests.
This commit is contained in:
parent
499cb0526f
commit
99194b1450
@ -0,0 +1,12 @@
|
||||
contract C {
|
||||
function f(bytes calldata b, uint i) internal pure returns (byte) {
|
||||
return b[i];
|
||||
}
|
||||
function f(uint, bytes calldata b, uint) external pure returns (byte) {
|
||||
return f(b, 2);
|
||||
}
|
||||
}
|
||||
// ====
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// f(uint256,bytes,uint256): 7, 0x60, 7, 4, "abcd" -> "c"
|
@ -0,0 +1,17 @@
|
||||
contract C {
|
||||
function(bytes calldata) returns (byte) x;
|
||||
constructor() public { x = f; }
|
||||
function f(bytes calldata b) internal pure returns (byte) {
|
||||
return b[2];
|
||||
}
|
||||
function h(bytes calldata b) external returns (byte) {
|
||||
return x(b);
|
||||
}
|
||||
function g() external returns (byte) {
|
||||
bytes memory a = new bytes(34);
|
||||
a[2] = byte(uint8(7));
|
||||
return this.h(a);
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// g() -> 0x0700000000000000000000000000000000000000000000000000000000000000
|
@ -0,0 +1,22 @@
|
||||
library L {
|
||||
function f(uint, bytes calldata _x, uint) internal returns (byte) {
|
||||
return _x[2];
|
||||
}
|
||||
}
|
||||
contract C {
|
||||
function f(bytes calldata a)
|
||||
external
|
||||
returns (byte)
|
||||
{
|
||||
return L.f(3, a, 9);
|
||||
}
|
||||
function g() public returns (byte) {
|
||||
bytes memory x = new bytes(4);
|
||||
x[2] = 0x08;
|
||||
return this.f(x);
|
||||
}
|
||||
}
|
||||
// ====
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// g() -> 0x0800000000000000000000000000000000000000000000000000000000000000
|
@ -0,0 +1,23 @@
|
||||
pragma experimental ABIEncoderV2;
|
||||
|
||||
contract C {
|
||||
function g(uint[][2] calldata s) internal pure returns (uint, uint[] calldata) {
|
||||
return (s[0][1], s[1]);
|
||||
}
|
||||
function f(uint, uint[][2] calldata s, uint) external pure returns (uint, uint) {
|
||||
(uint x, uint[] calldata y) = g(s);
|
||||
return (x, y[0]);
|
||||
}
|
||||
function g() public returns (uint, uint) {
|
||||
uint[][2] memory x;
|
||||
x[0] = new uint[](2);
|
||||
x[1] = new uint[](2);
|
||||
x[0][1] = 7;
|
||||
x[1][0] = 8;
|
||||
return this.f(4, x, 5);
|
||||
}
|
||||
}
|
||||
// ====
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// g() -> 7, 8
|
@ -0,0 +1,19 @@
|
||||
contract C {
|
||||
function g(uint[3][2] calldata s) internal pure returns (uint, uint[3] calldata) {
|
||||
return (s[0][1], s[1]);
|
||||
}
|
||||
function f(uint, uint[3][2] calldata s, uint) external pure returns (uint, uint) {
|
||||
(uint x, uint[3] calldata y) = g(s);
|
||||
return (x, y[0]);
|
||||
}
|
||||
function g() public returns (uint, uint) {
|
||||
uint[3][2] memory x;
|
||||
x[0][1] = 7;
|
||||
x[1][0] = 8;
|
||||
return this.f(4, x, 5);
|
||||
}
|
||||
}
|
||||
// ====
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// g() -> 7, 8
|
@ -0,0 +1,21 @@
|
||||
contract C {
|
||||
function f(bytes memory _a, bytes calldata _b, bytes memory _c)
|
||||
public
|
||||
returns (uint, byte, byte, byte)
|
||||
{
|
||||
return (_a.length + _b.length + _c.length, _a[1], _b[1], _c[1]);
|
||||
}
|
||||
function g() public returns (uint, byte, byte, byte) {
|
||||
bytes memory x = new bytes(3);
|
||||
bytes memory y = new bytes(4);
|
||||
bytes memory z = new bytes(7);
|
||||
x[1] = 0x08;
|
||||
y[1] = 0x09;
|
||||
z[1] = 0x0a;
|
||||
return this.f(x, y, z);
|
||||
}
|
||||
}
|
||||
// ====
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// g() -> 0x0e, 0x0800000000000000000000000000000000000000000000000000000000000000, 0x0900000000000000000000000000000000000000000000000000000000000000, 0x0a00000000000000000000000000000000000000000000000000000000000000
|
@ -0,0 +1,17 @@
|
||||
pragma experimental ABIEncoderV2;
|
||||
|
||||
struct S {
|
||||
uint x;
|
||||
uint y;
|
||||
}
|
||||
|
||||
contract C {
|
||||
function f(S calldata s) internal pure returns (uint, uint) {
|
||||
return (s.x, s.y);
|
||||
}
|
||||
function f(uint, S calldata s, uint) external pure returns (uint, uint) {
|
||||
return f(s);
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// f(uint256,(uint256,uint256),uint256): 7, 1, 2, 4 -> 1, 2
|
Loading…
Reference in New Issue
Block a user