1contract Test { 2 struct S { 3 uint8 x; 4 uint16 y; 5 uint256 z; 6 uint8[2] a; 7 } 8 S[5] data; 9 10 function testInit() 11 public 12 returns (uint8 x, uint16 y, uint256 z, uint8 a, bool flag) 13 { 14 S[2] memory d; 15 x = d[0].x; 16 y = d[0].y; 17 z = d[0].z; 18 a = d[0].a[1]; 19 flag = true; 20 } 21 22 function testCopyRead() 23 public 24 returns (uint8 x, uint16 y, uint256 z, uint8 a) 25 { 26 data[2].x = 1; 27 data[2].y = 2; 28 data[2].z = 3; 29 data[2].a[1] = 4; 30 S memory s = data[2]; 31 x = s.x; 32 y = s.y; 33 z = s.z; 34 a = s.a[1]; 35 } 36 37 function testAssign() 38 public 39 returns (uint8 x, uint16 y, uint256 z, uint8 a) 40 { 41 S memory s; 42 s.x = 1; 43 s.y = 2; 44 s.z = 3; 45 s.a[1] = 4; 46 x = s.x; 47 y = s.y; 48 z = s.z; 49 a = s.a[1]; 50 } 51} 52 53// ==== 54// compileViaYul: also 55// compileToEwasm: also 56// ---- 57// testInit() -> 0, 0, 0, 0, true 58// testCopyRead() -> 1, 2, 3, 4 59// testAssign() -> 1, 2, 3, 4 60