Skip to content

Commit 09fd459

Browse files
committed
Enable ethdebug debug info and output selection via standard-json.
1 parent 1667716 commit 09fd459

File tree

22 files changed

+107
-44
lines changed

22 files changed

+107
-44
lines changed

libsolidity/interface/StandardCompiler.cpp

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ bool isBinaryRequested(Json const& _outputSelection)
265265
static std::vector<std::string> const outputsThatRequireBinaries = std::vector<std::string>{
266266
"*",
267267
"ir", "irAst", "irOptimized", "irOptimizedAst",
268-
"evm.gasEstimates", "evm.legacyAssembly", "evm.assembly"
268+
"evm.gasEstimates", "evm.legacyAssembly", "evm.assembly", "ethdebug"
269269
} + evmObjectComponents("bytecode") + evmObjectComponents("deployedBytecode");
270270

271271
for (auto const& fileRequests: _outputSelection)
@@ -295,6 +295,26 @@ bool isEvmBytecodeRequested(Json const& _outputSelection)
295295
return false;
296296
}
297297

298+
/// @returns true if ethdebug was requested.
299+
bool isEthdebugRequested(Json const& _outputSelection)
300+
{
301+
if (!_outputSelection.is_object())
302+
return false;
303+
304+
static std::vector<std::string> const outputsThatRequireEvmBinaries = std::vector<std::string>{
305+
"*",
306+
"ethdebug"
307+
};
308+
309+
for (auto const& fileRequests: _outputSelection)
310+
for (auto const& requests: fileRequests)
311+
for (auto const& output: outputsThatRequireEvmBinaries)
312+
if (isArtifactRequested(requests, output, false))
313+
return true;
314+
return false;
315+
}
316+
317+
298318
/// @returns The IR output selection for CompilerStack, based on outputs requested in the JSON.
299319
/// Note that as an exception, '*' does not yet match "ir", "irAst", "irOptimized" or "irOptimizedAst".
300320
CompilerStack::IROutputSelection irOutputSelection(Json const& _outputSelection)
@@ -1306,7 +1326,7 @@ Json StandardCompiler::compileSolidity(StandardCompiler::InputsAndSettings _inpu
13061326
compilerStack.setSources(sourceList);
13071327
for (auto const& smtLib2Response: _inputsAndSettings.smtLib2Responses)
13081328
compilerStack.addSMTLib2Response(smtLib2Response.first, smtLib2Response.second);
1309-
compilerStack.setViaIR(_inputsAndSettings.viaIR);
1329+
compilerStack.setViaIR(_inputsAndSettings.viaIR || isEthdebugRequested(_inputsAndSettings.outputSelection));
13101330
compilerStack.setEVMVersion(_inputsAndSettings.evmVersion);
13111331
compilerStack.setRemappings(std::move(_inputsAndSettings.remappings));
13121332
compilerStack.setOptimiserSettings(std::move(_inputsAndSettings.optimiserSettings));
@@ -1326,12 +1346,9 @@ Json StandardCompiler::compileSolidity(StandardCompiler::InputsAndSettings _inpu
13261346

13271347
Json errors = std::move(_inputsAndSettings.errors);
13281348

1329-
if (
1330-
_inputsAndSettings.debugInfoSelection.has_value() &&
1331-
_inputsAndSettings.debugInfoSelection->ethdebug &&
1332-
(selectedIrOutput == CompilerStack::IROutputSelection::None && !_inputsAndSettings.viaIR)
1333-
)
1334-
errors.emplace_back(formatError(Error::Type::FatalError, "general", "'ethdebug' can only be selected in 'settings.debug.debugInfo' when at least one of the IR outputs is selected or 'viaIR' was set."));
1349+
if (_inputsAndSettings.debugInfoSelection.has_value() && _inputsAndSettings.debugInfoSelection->ethdebug)
1350+
if (selectedIrOutput == CompilerStack::IROutputSelection::None && !isEthdebugRequested(_inputsAndSettings.outputSelection))
1351+
errors.emplace_back(formatError(Error::Type::FatalError, "general", "'ethdebug' can only be selected in 'settings.debug.debugInfo' when either an IR output or 'ethdebug' was selected as output."));
13351352

13361353
bool const binariesRequested = isBinaryRequested(_inputsAndSettings.outputSelection);
13371354

test/cmdlineTests/standard_debug_info_ethdebug_no_ir/output.json

Lines changed: 0 additions & 32 deletions
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
{
22
"language": "Solidity",
33
"sources": {
4-
"C": {"urls": ["standard_debug_info_ethdebug_no_ir/in.sol"]}
4+
"C": {"urls": ["standard_debug_info_in_yul_ethdebug_output_ethdebug/in.sol"]}
55
},
66
"settings": {
77
"debug": {"debugInfo": ["ethdebug"]},
88
"outputSelection": {
9-
"*": {"*": ["evm.bytecode"]}
9+
"*": {"*": ["ethdebug", "metadata"]}
1010
}
1111
}
1212
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"contracts": {
3+
"C": {
4+
"C": {
5+
"metadata": "{\"compiler\":{\"version\":\"<VERSION REMOVED>\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"f\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"C\":\"C\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[],\"viaIR\":true},\"sources\":{\"C\":{\"keccak256\":\"0xd664727da2d62b6156845f13be0ecb2d8d8223c0f736d39575a3bdfbb062c320\",\"license\":\"GPL-2.0\",\"urls\":[\"bzz-raw://470d51a492c4368fac9c29ebb491b0eaa1bc8a660445a014276dc686531742b8\",\"dweb:/ipfs/QmVVnjC3Z35AXGo3GUNPMuKBD2MdFcZxhVg1qHi4fmHzKo\"]}},\"version\":1}"
6+
}
7+
}
8+
},
9+
"sources": {
10+
"C": {
11+
"id": 0
12+
}
13+
}
14+
}

test/cmdlineTests/standard_debug_info_in_yul_ethdebug/input.json renamed to test/cmdlineTests/standard_debug_info_in_yul_ethdebug_output_ir/input.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"language": "Solidity",
33
"sources": {
4-
"C": {"urls": ["standard_debug_info_in_yul_ethdebug/in.sol"]}
4+
"C": {"urls": ["standard_debug_info_in_yul_ethdebug_output_ir/in.sol"]}
55
},
66
"settings": {
77
"debug": {"debugInfo": ["ethdebug"]},

0 commit comments

Comments
 (0)