mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Fix ICE when requesting --combined-json
outputs other than AST with --stop-after parsing
This commit is contained in:
parent
b17757ea17
commit
36429e397c
@ -844,6 +844,9 @@ void CommandLineInterface::handleCombinedJSON()
|
|||||||
|
|
||||||
output[g_strVersion] = frontend::VersionString;
|
output[g_strVersion] = frontend::VersionString;
|
||||||
vector<string> contracts = m_compiler->contractNames();
|
vector<string> contracts = m_compiler->contractNames();
|
||||||
|
|
||||||
|
// NOTE: The state checks here are more strict that in Standard JSON. There we allow
|
||||||
|
// requesting certain outputs even if compilation fails as long as analysis went ok.
|
||||||
bool compilationSuccess = m_compiler->state() >= CompilerStack::State::CompilationSuccessful;
|
bool compilationSuccess = m_compiler->state() >= CompilerStack::State::CompilationSuccessful;
|
||||||
|
|
||||||
if (!contracts.empty())
|
if (!contracts.empty())
|
||||||
@ -851,9 +854,9 @@ void CommandLineInterface::handleCombinedJSON()
|
|||||||
for (string const& contractName: contracts)
|
for (string const& contractName: contracts)
|
||||||
{
|
{
|
||||||
Json::Value& contractData = output[g_strContracts][contractName] = Json::objectValue;
|
Json::Value& contractData = output[g_strContracts][contractName] = Json::objectValue;
|
||||||
if (m_options.compiler.combinedJsonRequests->abi)
|
if (m_options.compiler.combinedJsonRequests->abi && compilationSuccess)
|
||||||
contractData[g_strAbi] = m_compiler->contractABI(contractName);
|
contractData[g_strAbi] = m_compiler->contractABI(contractName);
|
||||||
if (m_options.compiler.combinedJsonRequests->metadata)
|
if (m_options.compiler.combinedJsonRequests->metadata && compilationSuccess)
|
||||||
contractData["metadata"] = m_compiler->metadata(contractName);
|
contractData["metadata"] = m_compiler->metadata(contractName);
|
||||||
if (m_options.compiler.combinedJsonRequests->binary && compilationSuccess)
|
if (m_options.compiler.combinedJsonRequests->binary && compilationSuccess)
|
||||||
contractData[g_strBinary] = m_compiler->object(contractName).toHex();
|
contractData[g_strBinary] = m_compiler->object(contractName).toHex();
|
||||||
@ -887,11 +890,11 @@ void CommandLineInterface::handleCombinedJSON()
|
|||||||
contractData[g_strFunDebugRuntime] = StandardCompiler::formatFunctionDebugData(
|
contractData[g_strFunDebugRuntime] = StandardCompiler::formatFunctionDebugData(
|
||||||
m_compiler->runtimeObject(contractName).functionDebugData
|
m_compiler->runtimeObject(contractName).functionDebugData
|
||||||
);
|
);
|
||||||
if (m_options.compiler.combinedJsonRequests->signatureHashes)
|
if (m_options.compiler.combinedJsonRequests->signatureHashes && compilationSuccess)
|
||||||
contractData[g_strSignatureHashes] = m_compiler->interfaceSymbols(contractName)["methods"];
|
contractData[g_strSignatureHashes] = m_compiler->interfaceSymbols(contractName)["methods"];
|
||||||
if (m_options.compiler.combinedJsonRequests->natspecDev)
|
if (m_options.compiler.combinedJsonRequests->natspecDev && compilationSuccess)
|
||||||
contractData[g_strNatspecDev] = m_compiler->natspecDev(contractName);
|
contractData[g_strNatspecDev] = m_compiler->natspecDev(contractName);
|
||||||
if (m_options.compiler.combinedJsonRequests->natspecUser)
|
if (m_options.compiler.combinedJsonRequests->natspecUser && compilationSuccess)
|
||||||
contractData[g_strNatspecUser] = m_compiler->natspecUser(contractName);
|
contractData[g_strNatspecUser] = m_compiler->natspecUser(contractName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
1
test/cmdlineTests/combined_json_stop_after_parsing/args
Normal file
1
test/cmdlineTests/combined_json_stop_after_parsing/args
Normal file
@ -0,0 +1 @@
|
|||||||
|
--pretty-json --json-indent 4 --stop-after parsing --combined-json abi,asm,ast,bin,bin-runtime,devdoc,function-debug,function-debug-runtime,generated-sources,generated-sources-runtime,hashes,metadata,opcodes,srcmap,srcmap-runtime,storage-layout,userdoc
|
@ -0,0 +1,4 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-3.0
|
||||||
|
pragma solidity *;
|
||||||
|
|
||||||
|
contract C {}
|
53
test/cmdlineTests/combined_json_stop_after_parsing/output
Normal file
53
test/cmdlineTests/combined_json_stop_after_parsing/output
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
{
|
||||||
|
"contracts":
|
||||||
|
{
|
||||||
|
"combined_json_stop_after_parsing/input.sol:C": {}
|
||||||
|
},
|
||||||
|
"sourceList":
|
||||||
|
[
|
||||||
|
"combined_json_stop_after_parsing/input.sol"
|
||||||
|
],
|
||||||
|
"sources":
|
||||||
|
{
|
||||||
|
"combined_json_stop_after_parsing/input.sol":
|
||||||
|
{
|
||||||
|
"AST":
|
||||||
|
{
|
||||||
|
"absolutePath": "combined_json_stop_after_parsing/input.sol",
|
||||||
|
"id": 3,
|
||||||
|
"license": "GPL-3.0",
|
||||||
|
"nodeType": "SourceUnit",
|
||||||
|
"nodes":
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"id": 1,
|
||||||
|
"literals":
|
||||||
|
[
|
||||||
|
"solidity",
|
||||||
|
"*"
|
||||||
|
],
|
||||||
|
"nodeType": "PragmaDirective",
|
||||||
|
"src": "36:18:0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"abstract": false,
|
||||||
|
"baseContracts": [],
|
||||||
|
"contractDependencies": [],
|
||||||
|
"contractKind": "contract",
|
||||||
|
"id": 2,
|
||||||
|
"name": "C",
|
||||||
|
"nameLocation": "65:1:0",
|
||||||
|
"nodeType": "ContractDefinition",
|
||||||
|
"nodes": [],
|
||||||
|
"src": "56:13:0",
|
||||||
|
"usedErrors": [],
|
||||||
|
"usedEvents": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"src": "36:34:0"
|
||||||
|
},
|
||||||
|
"id": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"version": "<VERSION REMOVED>"
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user