diff --git a/libevmasm/Assembly.cpp b/libevmasm/Assembly.cpp index 96cd792aa..3875b7dd7 100644 --- a/libevmasm/Assembly.cpp +++ b/libevmasm/Assembly.cpp @@ -269,7 +269,7 @@ AssemblyItem Assembly::createAssemblyItemFromJSON(Json::Value const& _json, std: } else if (name == "VERBATIM") { - requireValueUndefinedForInstruction(name, value); + requireValueDefinedForInstruction(name, value); AssemblyItem item(fromHex(value), 0, 0); result = item; } diff --git a/test/cmdlineTests/asm_json_export_yul_verbatim/args b/test/cmdlineTests/asm_json_export_yul_verbatim/args new file mode 100644 index 000000000..a639549cf --- /dev/null +++ b/test/cmdlineTests/asm_json_export_yul_verbatim/args @@ -0,0 +1 @@ +--strict-assembly - --asm-json diff --git a/test/cmdlineTests/asm_json_export_yul_verbatim/output b/test/cmdlineTests/asm_json_export_yul_verbatim/output new file mode 100644 index 000000000..675ea2087 --- /dev/null +++ b/test/cmdlineTests/asm_json_export_yul_verbatim/output @@ -0,0 +1,3 @@ + +======= (EVM) ======= +{".code":[{"begin":28,"end":29,"name":"PUSH","source":0,"value":"0"},{"begin":15,"end":30,"name":"CALLDATALOAD","source":0},{"begin":44,"end":46,"name":"PUSH","source":0,"value":"14"},{"begin":61,"end":62,"name":"DUP1","source":0},{"begin":58,"end":59,"name":"DUP3","source":0},{"begin":51,"end":63,"name":"SSTORE","source":0},{"begin":84,"end":86,"name":"PUSH","source":0,"value":"20"},{"begin":71,"end":87,"name":"CALLDATALOAD","source":0},{"begin":68,"end":188,"name":"ISZERO","source":0},{"begin":68,"end":188,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":68,"end":188,"name":"JUMPI","source":0},{"begin":108,"end":109,"name":"DUP1","source":0},{"begin":105,"end":106,"name":"DUP3","source":0},{"begin":98,"end":110,"name":"SSTORE","source":0},{"begin":149,"end":150,"name":"PUSH","source":0,"value":"0"},{"begin":146,"end":147,"name":"DUP1","source":0},{"begin":143,"end":144,"name":"PUSH","source":0,"value":"0"},{"begin":140,"end":141,"name":"DUP1","source":0},{"begin":137,"end":138,"name":"PUSH","source":0,"value":"0"},{"begin":134,"end":135,"name":"DUP1","source":0},{"begin":123,"end":151,"name":"STATICCALL","source":0},{"begin":119,"end":152,"name":"POP","source":0},{"begin":161,"end":182,"name":"VERBATIM","source":0,"value":"78797a"},{"begin":68,"end":188,"name":"tag","source":0,"value":"1"},{"begin":68,"end":188,"name":"JUMPDEST","source":0},{"begin":203,"end":204,"name":"DUP1","source":0},{"begin":200,"end":201,"name":"DUP3","source":0},{"begin":193,"end":205,"name":"SSTORE","source":0},{"begin":0,"end":207,"name":"POP","source":0},{"begin":0,"end":207,"name":"POP","source":0}],"sourceList":[""]} diff --git a/test/cmdlineTests/asm_json_export_yul_verbatim/stdin b/test/cmdlineTests/asm_json_export_yul_verbatim/stdin new file mode 100644 index 000000000..eac2ef83d --- /dev/null +++ b/test/cmdlineTests/asm_json_export_yul_verbatim/stdin @@ -0,0 +1,11 @@ +{ + let a := calldataload(0) + let b := 20 + sstore(a, b) + if calldataload(32) { + sstore(a, b) + pop(staticcall(0, 0, 0, 0, 0, 0)) + verbatim_0i_0o("xyz") + } + sstore(a, b) +} diff --git a/test/cmdlineTests/asm_json_import_verbatim/args b/test/cmdlineTests/asm_json_import_verbatim/args new file mode 100644 index 000000000..2b4b3a153 --- /dev/null +++ b/test/cmdlineTests/asm_json_import_verbatim/args @@ -0,0 +1 @@ +--import-asm-json - --opcodes --asm diff --git a/test/cmdlineTests/asm_json_import_verbatim/output b/test/cmdlineTests/asm_json_import_verbatim/output new file mode 100644 index 000000000..b2cea96a6 --- /dev/null +++ b/test/cmdlineTests/asm_json_import_verbatim/output @@ -0,0 +1,58 @@ +Opcodes: +PUSH1 0x0 CALLDATALOAD PUSH1 0x14 DUP1 DUP3 SSTORE PUSH1 0x20 CALLDATALOAD ISZERO PUSH1 0x20 JUMPI DUP1 DUP3 SSTORE PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 STATICCALL POP PUSH25 0x797A5B80825550500000000000000000000000000000000000 +EVM assembly: + /* "":28:29 b */ + 0x00 + /* "":15:30 {... */ + calldataload + /* "":44:46 */ + 0x14 + /* "":61:62 */ + dup1 + /* "":58:59 */ + dup3 + /* "":51:63 : 29,... */ + sstore + /* "":84:86 " */ + 0x20 + /* "":71:87 "PUSH",... */ + calldataload + /* "":68:188 ": "PUSH",... */ + iszero + tag_1 + jumpi + /* "":108:109 u */ + dup1 + /* "":105:106 v */ + dup3 + /* "":98:110 "value */ + sstore + /* "":149:150 */ + 0x00 + /* "":146:147 5 */ + dup1 + /* "":143:144 : */ + 0x00 + /* "":140:141 i */ + dup1 + /* "":137:138 b */ + 0x00 + /* "":134:135 */ + dup1 + /* "":123:151 ... */ + staticcall + /* "":119:152 },... */ + pop + /* "":161:182 30,... */ + verbatimbytecode_78797a + /* "":68:188 ": "PUSH",... */ +tag_1: + /* "":203:204 s */ + dup1 + /* "":200:201 */ + dup3 + /* "":193:205 ",... */ + sstore + /* "":0:207 {... */ + pop + pop diff --git a/test/cmdlineTests/asm_json_import_verbatim/stdin b/test/cmdlineTests/asm_json_import_verbatim/stdin new file mode 100644 index 000000000..8c1d7300e --- /dev/null +++ b/test/cmdlineTests/asm_json_import_verbatim/stdin @@ -0,0 +1,196 @@ +{ + ".code": [ + { + "begin": 28, + "end": 29, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 15, + "end": 30, + "name": "CALLDATALOAD", + "source": 0 + }, + { + "begin": 44, + "end": 46, + "name": "PUSH", + "source": 0, + "value": "14" + }, + { + "begin": 61, + "end": 62, + "name": "DUP1", + "source": 0 + }, + { + "begin": 58, + "end": 59, + "name": "DUP3", + "source": 0 + }, + { + "begin": 51, + "end": 63, + "name": "SSTORE", + "source": 0 + }, + { + "begin": 84, + "end": 86, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { + "begin": 71, + "end": 87, + "name": "CALLDATALOAD", + "source": 0 + }, + { + "begin": 68, + "end": 188, + "name": "ISZERO", + "source": 0 + }, + { + "begin": 68, + "end": 188, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { + "begin": 68, + "end": 188, + "name": "JUMPI", + "source": 0 + }, + { + "begin": 108, + "end": 109, + "name": "DUP1", + "source": 0 + }, + { + "begin": 105, + "end": 106, + "name": "DUP3", + "source": 0 + }, + { + "begin": 98, + "end": 110, + "name": "SSTORE", + "source": 0 + }, + { + "begin": 149, + "end": 150, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 146, + "end": 147, + "name": "DUP1", + "source": 0 + }, + { + "begin": 143, + "end": 144, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 140, + "end": 141, + "name": "DUP1", + "source": 0 + }, + { + "begin": 137, + "end": 138, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 134, + "end": 135, + "name": "DUP1", + "source": 0 + }, + { + "begin": 123, + "end": 151, + "name": "STATICCALL", + "source": 0 + }, + { + "begin": 119, + "end": 152, + "name": "POP", + "source": 0 + }, + { + "begin": 161, + "end": 182, + "name": "VERBATIM", + "source": 0, + "value": "78797a" + }, + { + "begin": 68, + "end": 188, + "name": "tag", + "source": 0, + "value": "1" + }, + { + "begin": 68, + "end": 188, + "name": "JUMPDEST", + "source": 0 + }, + { + "begin": 203, + "end": 204, + "name": "DUP1", + "source": 0 + }, + { + "begin": 200, + "end": 201, + "name": "DUP3", + "source": 0 + }, + { + "begin": 193, + "end": 205, + "name": "SSTORE", + "source": 0 + }, + { + "begin": 0, + "end": 207, + "name": "POP", + "source": 0 + }, + { + "begin": 0, + "end": 207, + "name": "POP", + "source": 0 + } + ], + "sourceList": [ + "" + ] +}