diff --git a/libsolidity/interface/StandardCompiler.cpp b/libsolidity/interface/StandardCompiler.cpp index 26f2388380e0..a683fee8694e 100644 --- a/libsolidity/interface/StandardCompiler.cpp +++ b/libsolidity/interface/StandardCompiler.cpp @@ -392,39 +392,6 @@ Json formatSubAssemblyOffsets(std::vector con return subs; } -Json collectEVMObject( - langutil::EVMVersion _evmVersion, - evmasm::LinkerObject const& _object, - std::string const* _sourceMap, - Json _generatedSources, - bool _runtimeObject, - std::function const& _artifactRequested -) -{ - Json output; - if (_artifactRequested("object")) - output["object"] = _object.toHex(); - if (_artifactRequested("opcodes")) - output["opcodes"] = evmasm::disassemble(_object.bytecode, _evmVersion); - if (_artifactRequested("sourceMap")) - output["sourceMap"] = _sourceMap ? *_sourceMap : ""; - if (_artifactRequested("functionDebugData")) - output["functionDebugData"] = StandardCompiler::formatFunctionDebugData(_object.functionDebugData); - if (_artifactRequested("linkReferences")) - output["linkReferences"] = formatLinkReferences(_object.linkReferences); - if (_runtimeObject && _artifactRequested("immutableReferences")) - output["immutableReferences"] = formatImmutableReferences(_object.immutableReferences); - if (_artifactRequested("generatedSources")) - output["generatedSources"] = std::move(_generatedSources); - if (_artifactRequested("subAssemblyOffsets")) - { - Json ret = Json::object(); - ret["subs"] = formatSubAssemblyOffsets(_object.subAssemblyData); - output["subAssemblyOffsets"] = std::move(ret); - } - return output; -} - std::optional checkKeys(Json const& _input, std::set const& _keys, std::string const& _name) { if (!_input.empty() && !_input.is_object()) @@ -1286,6 +1253,12 @@ Json StandardCompiler::importEVMAssembly(StandardCompiler::InputsAndSettings _in creationJSON["functionDebugData"] = formatFunctionDebugData(stack.object(sourceName).functionDebugData); if (evmCreationArtifactRequested("linkReferences")) creationJSON["linkReferences"] = formatLinkReferences(stack.object(sourceName).linkReferences); + if (evmCreationArtifactRequested("subAssemblyOffsets")) + { + Json ret = Json::object(); + ret["subs"] = formatSubAssemblyOffsets(stack.runtimeObject(sourceName).subAssemblyData); + creationJSON["subAssemblyOffsets"] = std::move(ret); + } evmData["bytecode"] = creationJSON; } @@ -1314,6 +1287,12 @@ Json StandardCompiler::importEVMAssembly(StandardCompiler::InputsAndSettings _in deployedJSON["linkReferences"] = formatLinkReferences(stack.runtimeObject(sourceName).linkReferences); if (evmDeployedArtifactRequested("immutableReferences")) deployedJSON["immutableReferences"] = formatImmutableReferences(stack.runtimeObject(sourceName).immutableReferences); + if (evmDeployedArtifactRequested("subAssemblyOffsets")) + { + Json ret = Json::object(); + ret["subs"] = formatSubAssemblyOffsets(stack.runtimeObject(sourceName).subAssemblyData); + deployedJSON["subAssemblyOffsets"] = std::move(ret); + } evmData["deployedBytecode"] = deployedJSON; } @@ -1554,6 +1533,12 @@ Json StandardCompiler::compileSolidity(StandardCompiler::InputsAndSettings _inpu creationJSON["linkReferences"] = formatLinkReferences(compilerStack.object(contractName).linkReferences); if (evmCreationArtifactRequested("generatedSources")) creationJSON["generatedSources"] = compilerStack.generatedSources(contractName, /* _runtime */ false); + if (evmCreationArtifactRequested("subAssemblyOffsets")) + { + Json ret = Json::object(); + ret["subs"] = formatSubAssemblyOffsets(compilerStack.object(contractName).subAssemblyData); + creationJSON["subAssemblyOffsets"] = std::move(ret); + } evmData["bytecode"] = creationJSON; } @@ -1584,6 +1569,12 @@ Json StandardCompiler::compileSolidity(StandardCompiler::InputsAndSettings _inpu deployedJSON["immutableReferences"] = formatImmutableReferences(compilerStack.runtimeObject(contractName).immutableReferences); if (evmDeployedArtifactRequested("generatedSources")) deployedJSON["generatedSources"] = compilerStack.generatedSources(contractName, /* _runtime */ true); + if (evmDeployedArtifactRequested("subAssemblyOffsets")) + { + Json ret = Json::object(); + ret["subs"] = formatSubAssemblyOffsets(compilerStack.object(contractName).subAssemblyData); + deployedJSON["subAssemblyOffsets"] = std::move(ret); + } evmData["deployedBytecode"] = deployedJSON; } diff --git a/test/cmdlineTests/standard_import_asm_json/output.json b/test/cmdlineTests/standard_import_asm_json/output.json index 0ac2b981cdb1..753fea1305ca 100644 --- a/test/cmdlineTests/standard_import_asm_json/output.json +++ b/test/cmdlineTests/standard_import_asm_json/output.json @@ -13,13 +13,7 @@ "opcodes":"", "sourceMap":"", "subAssemblyOffsets": { - "subs": [ - { - "isCreation": true, - "length": 1, - "start": 0 - } - ] + "subs": [] } }, "deployedBytecode": { diff --git a/test/cmdlineTests/standard_import_asm_json_immutable_references/output.json b/test/cmdlineTests/standard_import_asm_json_immutable_references/output.json index 0de008428a0d..41a5b65815b0 100644 --- a/test/cmdlineTests/standard_import_asm_json_immutable_references/output.json +++ b/test/cmdlineTests/standard_import_asm_json_immutable_references/output.json @@ -12,16 +12,9 @@ "subAssemblyOffsets": { "subs": [ { - "isCreation": true, - "length": 5, - "start": 0, - "subs": [ - { - "isCreation": false, - "length": 87, - "start": 18446744073709551534 - } - ] + "isCreation": false, + "length": 87, + "start": 0 } ] } diff --git a/test/cmdlineTests/standard_import_asm_json_link_references/output.json b/test/cmdlineTests/standard_import_asm_json_link_references/output.json index 2bbe700c507c..f1231edbed27 100644 --- a/test/cmdlineTests/standard_import_asm_json_link_references/output.json +++ b/test/cmdlineTests/standard_import_asm_json_link_references/output.json @@ -12,16 +12,9 @@ "subAssemblyOffsets": { "subs": [ { - "isCreation": true, - "length": 1, - "start": 0, - "subs": [ - { - "isCreation": false, - "length": 75, - "start": 18446744073709551542 - } - ] + "isCreation": false, + "length": 75, + "start": 0 } ] } diff --git a/test/cmdlineTests/standard_import_ast_select_bytecode/output.json b/test/cmdlineTests/standard_import_ast_select_bytecode/output.json index df46ad5d51ee..10e6f48df5bf 100644 --- a/test/cmdlineTests/standard_import_ast_select_bytecode/output.json +++ b/test/cmdlineTests/standard_import_ast_select_bytecode/output.json @@ -14,12 +14,12 @@ "subs": [ { "isCreation": true, - "length": 131, + "length": 130, "start": 0, "subs": [ { "isCreation": false, - "length": 105, + "length": 104, "start": 26 } ] diff --git a/test/cmdlineTests/standard_subassembly_offsets/output.json b/test/cmdlineTests/standard_subassembly_offsets/output.json index c57cb381a203..10e28fe7670a 100644 --- a/test/cmdlineTests/standard_subassembly_offsets/output.json +++ b/test/cmdlineTests/standard_subassembly_offsets/output.json @@ -8,23 +8,23 @@ "subs": [ { "isCreation": true, - "length": 1789, + "length": 1787, "start": 0, "subs": [ { "isCreation": false, - "length": 781, - "start": 1008 + "length": 780, + "start": 1007 }, { "isCreation": true, - "length": 131, - "start": 1658, + "length": 130, + "start": 1657, "subs": [ { "isCreation": false, - "length": 105, - "start": 1684 + "length": 104, + "start": 1683 } ] } diff --git a/test/cmdlineTests/standard_yul/output.json b/test/cmdlineTests/standard_yul/output.json index 567142f8c870..a72904ee6c31 100644 --- a/test/cmdlineTests/standard_yul/output.json +++ b/test/cmdlineTests/standard_yul/output.json @@ -21,16 +21,7 @@ "linkReferences": {}, "object": "", "opcodes":"", - "sourceMap":"", - "subAssemblyOffsets": { - "subs": [ - { - "isCreation": true, - "length": 7, - "start": 0 - } - ] - } + "sourceMap":"" } }, "ir": "object \"object\" { diff --git a/test/cmdlineTests/standard_yul_immutable_references/output.json b/test/cmdlineTests/standard_yul_immutable_references/output.json index 72b77d6b83cd..3f82bcbaab54 100644 --- a/test/cmdlineTests/standard_yul_immutable_references/output.json +++ b/test/cmdlineTests/standard_yul_immutable_references/output.json @@ -8,23 +8,7 @@ "linkReferences": {}, "object": "", "opcodes":"", - "sourceMap":"", - "subAssemblyOffsets": { - "subs": [ - { - "isCreation": true, - "length": 56, - "start": 0, - "subs": [ - { - "isCreation": true, - "length": 39, - "start": 17 - } - ] - } - ] - } + "sourceMap":"" }, "deployedBytecode": { "functionDebugData": {}, @@ -39,16 +23,7 @@ "linkReferences": {}, "object": "", "opcodes":"", - "sourceMap":"", - "subAssemblyOffsets": { - "subs": [ - { - "isCreation": true, - "length": 39, - "start": 0 - } - ] - } + "sourceMap":"" } } } diff --git a/test/cmdlineTests/standard_yul_object/output.json b/test/cmdlineTests/standard_yul_object/output.json index fae05cae5db1..c1bb2eb3eb6d 100644 --- a/test/cmdlineTests/standard_yul_object/output.json +++ b/test/cmdlineTests/standard_yul_object/output.json @@ -22,16 +22,7 @@ data_4e03657aea45a94fc7d47ba826c8d667c0d1e6e33a64a036ec44f58fa12d6c45 616263 "linkReferences": {}, "object": "", "opcodes":"", - "sourceMap":"", - "subAssemblyOffsets": { - "subs": [ - { - "isCreation": true, - "length": 11, - "start": 0 - } - ] - } + "sourceMap":"" } }, "ir": "object \"NamedObject\" { diff --git a/test/cmdlineTests/standard_yul_object_name/output.json b/test/cmdlineTests/standard_yul_object_name/output.json index a9230356dadc..2b6dc1f73e85 100644 --- a/test/cmdlineTests/standard_yul_object_name/output.json +++ b/test/cmdlineTests/standard_yul_object_name/output.json @@ -30,23 +30,7 @@ sub_0: assembly { "linkReferences": {}, "object": "", "opcodes":"", - "sourceMap":"", - "subAssemblyOffsets": { - "subs": [ - { - "isCreation": true, - "length": 11, - "start": 0, - "subs": [ - { - "isCreation": true, - "length": 3, - "start": 8 - } - ] - } - ] - } + "sourceMap":"" }, "deployedBytecode": { "functionDebugData": {}, @@ -54,16 +38,7 @@ sub_0: assembly { "linkReferences": {}, "object": "", "opcodes":"", - "sourceMap":"", - "subAssemblyOffsets": { - "subs": [ - { - "isCreation": true, - "length": 3, - "start": 0 - } - ] - } + "sourceMap":"" } }, "ir": "object \"NamedObject\" { diff --git a/test/cmdlineTests/standard_yul_optimiserSteps/output.json b/test/cmdlineTests/standard_yul_optimiserSteps/output.json index e52260d76e42..621a029076e2 100644 --- a/test/cmdlineTests/standard_yul_optimiserSteps/output.json +++ b/test/cmdlineTests/standard_yul_optimiserSteps/output.json @@ -18,16 +18,7 @@ "linkReferences": {}, "object": "", "opcodes":"", - "sourceMap":"", - "subAssemblyOffsets": { - "subs": [ - { - "isCreation": true, - "length": 5, - "start": 0 - } - ] - } + "sourceMap":"" } }, "ir": "object \"object\" { diff --git a/test/cmdlineTests/standard_yul_optimized/output.json b/test/cmdlineTests/standard_yul_optimized/output.json index b3d4210e4661..ad0e9f40aa1f 100644 --- a/test/cmdlineTests/standard_yul_optimized/output.json +++ b/test/cmdlineTests/standard_yul_optimized/output.json @@ -18,16 +18,7 @@ "linkReferences": {}, "object": "", "opcodes":"", - "sourceMap":"", - "subAssemblyOffsets": { - "subs": [ - { - "isCreation": true, - "length": 5, - "start": 0 - } - ] - } + "sourceMap":"" } }, "ir": "object \"object\" { diff --git a/test/cmdlineTests/standard_yul_output_warning/output.json b/test/cmdlineTests/standard_yul_output_warning/output.json index 55a64c50432a..514280afcc80 100644 --- a/test/cmdlineTests/standard_yul_output_warning/output.json +++ b/test/cmdlineTests/standard_yul_output_warning/output.json @@ -22,16 +22,7 @@ "linkReferences": {}, "object": "", "opcodes":"", - "sourceMap":"", - "subAssemblyOffsets": { - "subs": [ - { - "isCreation": true, - "length": 8, - "start": 0 - } - ] - } + "sourceMap":"" } }, "irOptimized": "object \"object\" {