mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #7015 from ethereum/sol-yul-arrays
[Sol->Yul] Implement uint256[] memory arrays
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
contract C {
|
||||
function test(uint256 len, uint idx) public returns (uint256)
|
||||
{
|
||||
uint[] memory array = new uint[](len);
|
||||
uint result = receiver(array, idx);
|
||||
|
||||
for (uint256 i = 0; i < array.length; i++)
|
||||
require(array[i] == i + 1);
|
||||
|
||||
return result;
|
||||
}
|
||||
function receiver(uint[] memory array, uint idx) public returns (uint256)
|
||||
{
|
||||
for (uint256 i = 0; i < array.length; i++)
|
||||
array[i] = i + 1;
|
||||
|
||||
return array[idx];
|
||||
}
|
||||
}
|
||||
// ====
|
||||
// compileViaYul: true
|
||||
// ----
|
||||
// test(uint256,uint256): 0,0 -> FAILURE
|
||||
// test(uint256,uint256): 1,0 -> 1
|
||||
// test(uint256,uint256): 10,5 -> 6
|
||||
// test(uint256,uint256): 10,50 -> FAILURE
|
||||
@@ -0,0 +1,13 @@
|
||||
contract C {
|
||||
function create(uint256 len) public returns (uint256)
|
||||
{
|
||||
uint[] memory array = new uint[](len);
|
||||
return array.length;
|
||||
}
|
||||
}
|
||||
// ====
|
||||
// compileViaYul: true
|
||||
// ----
|
||||
// create(uint256): 0 -> 0
|
||||
// create(uint256): 7 -> 7
|
||||
// create(uint256): 10 -> 10
|
||||
@@ -0,0 +1,35 @@
|
||||
contract C {
|
||||
function index(uint256 len) public returns (bool)
|
||||
{
|
||||
uint[] memory array = new uint[](len);
|
||||
|
||||
for (uint256 i = 0; i < len; i++)
|
||||
array[i] = i + 1;
|
||||
|
||||
for (uint256 i = 0; i < len; i++)
|
||||
require(array[i] == i + 1, "Unexpected value in array!");
|
||||
|
||||
return array.length == len;
|
||||
}
|
||||
function accessIndex(uint256 len, int256 idx) public returns (uint256)
|
||||
{
|
||||
uint[] memory array = new uint[](len);
|
||||
|
||||
for (uint256 i = 0; i < len; i++)
|
||||
array[i] = i + 1;
|
||||
|
||||
return array[uint256(idx)];
|
||||
}
|
||||
}
|
||||
// ====
|
||||
// compileViaYul: true
|
||||
// ----
|
||||
// index(uint256): 0 -> true
|
||||
// index(uint256): 10 -> true
|
||||
// index(uint256): 20 -> true
|
||||
// index(uint256): 0xFF -> true
|
||||
// accessIndex(uint256,int256): 10,1 -> 2
|
||||
// accessIndex(uint256,int256): 10,0 -> 1
|
||||
// accessIndex(uint256,int256): 10,11 -> FAILURE
|
||||
// accessIndex(uint256,int256): 10,10 -> FAILURE
|
||||
// accessIndex(uint256,int256): 10,-1 -> FAILURE
|
||||
@@ -17,10 +17,6 @@ contract C {
|
||||
|
||||
return func() == internal_func();
|
||||
}
|
||||
function external_func() external pure returns (int8)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
// ====
|
||||
// compileViaYul: true
|
||||
|
||||
Reference in New Issue
Block a user