mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #6209 from ethereum/dynamicCalldataStructs
Allow dynamically encoded calldata structs with ABIEncoderV2.
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
pragma experimental ABIEncoderV2;
|
||||
|
||||
contract C {
|
||||
struct S2 { uint256 b; }
|
||||
struct S { uint256 a; S2[] children; }
|
||||
function f(S calldata s) external pure returns (uint256, uint256, uint256, uint256) {
|
||||
return (s.children.length, s.a, s.children[0].b, s.children[1].b);
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// f((uint256,(uint256)[])): 32, 17, 64, 2, 23, 42 -> 2, 17, 23, 42
|
||||
@@ -0,0 +1,10 @@
|
||||
pragma experimental ABIEncoderV2;
|
||||
|
||||
contract C {
|
||||
struct S { uint256[] a; }
|
||||
function f(S calldata s) external pure returns (uint256 a, uint256 b, uint256 c) {
|
||||
return (s.a.length, s.a[0], s.a[1]);
|
||||
}
|
||||
}
|
||||
// ----
|
||||
// f((uint256[])): 32, 32, 2, 42, 23 -> 2, 42, 23
|
||||
@@ -0,0 +1,7 @@
|
||||
pragma experimental ABIEncoderV2;
|
||||
contract Test {
|
||||
struct S { int[] a; }
|
||||
function f(S calldata) external { }
|
||||
}
|
||||
// ----
|
||||
// Warning: (0-33): Experimental features are turned on. Do not use experimental features on live deployments.
|
||||
Reference in New Issue
Block a user