1contract C { 2 bytes s = "bcdef"; 3 4 function f(bytes memory a) public returns (bytes memory) { 5 return bytes.concat(a, "bcdef"); 6 } 7 function g(bytes calldata a) public returns (bytes memory) { 8 return bytes.concat(a, "abcdefghabcdefghabcdefghabcdefghab"); 9 } 10 function h(bytes calldata a) public returns (bytes memory) { 11 return bytes.concat(a, s); 12 } 13 function j(bytes calldata a) public returns (bytes memory) { 14 bytes storage ref = s; 15 return bytes.concat(a, ref, s); 16 } 17 function k(bytes calldata a, string memory b) public returns (bytes memory) { 18 return bytes.concat(a, bytes(b)); 19 } 20 function slice(bytes calldata a) public returns (bytes memory) { 21 require(a.length > 2, ""); 22 return bytes.concat(a[:2], a[2:]); 23 } 24 function strParam(string calldata a) public returns (bytes memory) { 25 return bytes.concat(bytes(a), "bcdef"); 26 } 27 function fixedBytesParam(bytes16 b1, bytes15 b2, bytes31 b3) public returns ( 28 bytes memory, 29 bytes memory, 30 bytes memory, 31 bytes memory 32 ) { 33 return ( 34 bytes.concat(b1, b2), 35 bytes.concat(b1, b3), 36 bytes.concat(b1, "bcdef"), 37 bytes.concat(b1, s) 38 ); 39 } 40 function fixedBytesParam2(bytes calldata c, bytes6 b1, bytes6 b2) public returns (bytes memory, bytes memory) { 41 return ( 42 bytes.concat(s, b1, c), 43 bytes.concat(b1, c, b2) 44 ); 45 } 46} 47// ==== 48// compileViaYul: also 49// revertStrings: debug 50// ---- 51// f(bytes): 0x20, 32, "abcdabcdabcdabcdabcdabcdabcdabcd" -> 0x20, 37, "abcdabcdabcdabcdabcdabcdabcdabcd", "bcdef" 52// g(bytes): 0x20, 32, "abcdabcdabcdabcdabcdabcdabcdabcd" -> 0x20, 66, "abcdabcdabcdabcdabcdabcdabcdabcd", "abcdefghabcdefghabcdefghabcdefgh", "ab" 53// h(bytes): 0x20, 32, "abcdabcdabcdabcdabcdabcdabcdabcd" -> 0x20, 37, "abcdabcdabcdabcdabcdabcdabcdabcd", "bcdef" 54// j(bytes): 0x20, 32, "abcdabcdabcdabcdabcdabcdabcdabcd" -> 0x20, 42, "abcdabcdabcdabcdabcdabcdabcdabcd", "bcdefbcdef" 55// k(bytes,string): 0x40, 0x80, 32, "abcdabcdabcdabcdabcdabcdabcdabcd", 5, "bcdef" -> 0x20, 37, "abcdabcdabcdabcdabcdabcdabcdabcd", "bcdef" 56// slice(bytes): 0x20, 4, "abcd" -> 0x20, 4, "abcd" 57// strParam(string): 0x20, 32, "abcdabcdabcdabcdabcdabcdabcdabcd" -> 0x20, 37, "abcdabcdabcdabcdabcdabcdabcdabcd", "bcdef" 58// fixedBytesParam(bytes16,bytes15,bytes31): 59// "aabbccddeeffgghh", 60// "abcdefghabcdefg", 61// "0123456789012345678901234567890" -> 62// 0x80, 0xc0, 0x120, 0x160, 63// 31, "aabbccddeeffgghhabcdefghabcdefg", 64// 47, "aabbccddeeffgghh0123456789012345", "678901234567890", 65// 21, "aabbccddeeffgghhbcdef", 66// 21, "aabbccddeeffgghhbcdef" 67// fixedBytesParam2(bytes,bytes6,bytes6): 0x60, left(0x010203040506), left(0x0708090A0B0C), 20, left(0x1011121314151617181920212223242526272829) -> 68// 0x40, 0x80, 69// 31, left(0x62636465660102030405061011121314151617181920212223242526272829), 70// 32, 0x01020304050610111213141516171819202122232425262728290708090A0B0C 71// fixedBytesParam2(bytes,bytes6,bytes6): 0x60, left(0x01), left(0x02), 5, left(0x03) -> 72// 0x40, 0x80, 73// 16, left(0x6263646566010000000000030000000000), 74// 17, left(0x010000000000030000000002000000000000) 75