type T[] memory = StackSlot; function index_access<ValueType T>(T[] memory x, uint256 index) returns (T result) { StackSlot mptr = (T[] memory).unwrap(x); uint256 offset = 32 + index * 32; assembly ("memory-safe") { let size := mload(mptr) if iszero(lt(index, size)) { revert(0, 0) /* out of bounds */ } result := mload(add(mptr, offset)) } } function index_access<ValueType T>(T[] memory x, uint256 index) returns (T result) { StackSlot mptr = (T[] memory).unwrap(x); uint256 offset = 32 + index * 32; assembly ("memory-safe") { let size := mload(mptr) if iszero(lt(index, size)) { revert(0, 0) /* out of bounds */ } result := mload(add(mptr, offset)) } }
0.4.18