From 4c7151e57f90c2b0d7a47ff7d6470da54bae00f0 Mon Sep 17 00:00:00 2001 From: chriseth Date: Wed, 19 Dec 2018 12:22:19 +0100 Subject: Do not include empty JSON objects in output. --- libsolidity/interface/StandardCompiler.cpp | 16 ++++++++++------ test/cmdlineTests.sh | 2 +- test/cmdlineTests/standard.json.stdout | 2 +- .../cmdlineTests/standard_only_ast_requested.json.stdout | 2 +- test/libsolidity/LibSolc.cpp | 4 +++- 5 files changed, 16 insertions(+), 10 deletions(-) diff --git a/libsolidity/interface/StandardCompiler.cpp b/libsolidity/interface/StandardCompiler.cpp index 6415e732..137a4439 100644 --- a/libsolidity/interface/StandardCompiler.cpp +++ b/libsolidity/interface/StandardCompiler.cpp @@ -764,14 +764,18 @@ Json::Value StandardCompiler::compileInternal(Json::Value const& _input) m_compilerStack.runtimeSourceMapping(contractName) ); - contractData["evm"] = evmData; + if (!evmData.empty()) + contractData["evm"] = evmData; - if (!contractsOutput.isMember(file)) - contractsOutput[file] = Json::objectValue; - - contractsOutput[file][name] = contractData; + if (!contractData.empty()) + { + if (!contractsOutput.isMember(file)) + contractsOutput[file] = Json::objectValue; + contractsOutput[file][name] = contractData; + } } - output["contracts"] = contractsOutput; + if (!contractsOutput.empty()) + output["contracts"] = contractsOutput; return output; } diff --git a/test/cmdlineTests.sh b/test/cmdlineTests.sh index bb71e012..9d2ffa5f 100755 --- a/test/cmdlineTests.sh +++ b/test/cmdlineTests.sh @@ -132,7 +132,7 @@ test_solc_behaviour() { if [[ "$solc_args" == *"--standard-json"* ]]; then sed -i -e 's/{[^{]*Warning: This is a pre-release compiler version[^}]*},\{0,1\}//' "$stdout_path" - sed -i -e 's/,"errors":\[\]//' "$stdout_path" + sed -i -e 's/"errors":\[\],\{0,1\}//' "$stdout_path" else sed -i -e '/^Warning: This is a pre-release compiler version, please do not use it in production./d' "$stderr_path" sed -i -e 's/ Consider adding "pragma .*$//' "$stderr_path" diff --git a/test/cmdlineTests/standard.json.stdout b/test/cmdlineTests/standard.json.stdout index 490e1f80..59b90c8c 100644 --- a/test/cmdlineTests/standard.json.stdout +++ b/test/cmdlineTests/standard.json.stdout @@ -1 +1 @@ -{"contracts":{"A":{"C":{"evm":{}}}},"sources":{"A":{"id":0}}} +{"sources":{"A":{"id":0}}} diff --git a/test/cmdlineTests/standard_only_ast_requested.json.stdout b/test/cmdlineTests/standard_only_ast_requested.json.stdout index f4933c4b..b884ab7d 100644 --- a/test/cmdlineTests/standard_only_ast_requested.json.stdout +++ b/test/cmdlineTests/standard_only_ast_requested.json.stdout @@ -1 +1 @@ -{"contracts":{"A":{"C":{"evm":{}}}},"sources":{"A":{"ast":{"absolutePath":"A","exportedSymbols":{"C":[6]},"id":7,"nodeType":"SourceUnit","nodes":[{"id":1,"literals":["solidity",">=","0.0"],"nodeType":"PragmaDirective","src":"0:22:0"},{"baseContracts":[],"contractDependencies":[],"contractKind":"contract","documentation":null,"fullyImplemented":true,"id":6,"linearizedBaseContracts":[6],"name":"C","nodeType":"ContractDefinition","nodes":[{"body":{"id":4,"nodeType":"Block","src":"61:2:0","statements":[]},"documentation":null,"id":5,"implemented":true,"kind":"function","modifiers":[],"name":"f","nodeType":"FunctionDefinition","parameters":{"id":2,"nodeType":"ParameterList","parameters":[],"src":"46:2:0"},"returnParameters":{"id":3,"nodeType":"ParameterList","parameters":[],"src":"61:0:0"},"scope":6,"src":"36:27:0","stateMutability":"pure","superFunction":null,"visibility":"public"}],"scope":7,"src":"23:42:0"}],"src":"0:65:0"},"id":0}}} +{"sources":{"A":{"ast":{"absolutePath":"A","exportedSymbols":{"C":[6]},"id":7,"nodeType":"SourceUnit","nodes":[{"id":1,"literals":["solidity",">=","0.0"],"nodeType":"PragmaDirective","src":"0:22:0"},{"baseContracts":[],"contractDependencies":[],"contractKind":"contract","documentation":null,"fullyImplemented":true,"id":6,"linearizedBaseContracts":[6],"name":"C","nodeType":"ContractDefinition","nodes":[{"body":{"id":4,"nodeType":"Block","src":"61:2:0","statements":[]},"documentation":null,"id":5,"implemented":true,"kind":"function","modifiers":[],"name":"f","nodeType":"FunctionDefinition","parameters":{"id":2,"nodeType":"ParameterList","parameters":[],"src":"46:2:0"},"returnParameters":{"id":3,"nodeType":"ParameterList","parameters":[],"src":"61:0:0"},"scope":6,"src":"36:27:0","stateMutability":"pure","superFunction":null,"visibility":"public"}],"scope":7,"src":"23:42:0"}],"src":"0:65:0"},"id":0}}} diff --git a/test/libsolidity/LibSolc.cpp b/test/libsolidity/LibSolc.cpp index 09c08700..ec97f22f 100644 --- a/test/libsolidity/LibSolc.cpp +++ b/test/libsolidity/LibSolc.cpp @@ -81,7 +81,9 @@ BOOST_AUTO_TEST_CASE(standard_compilation) // Only tests some assumptions. The StandardCompiler is tested properly in another suite. BOOST_CHECK(result.isMember("sources")); - BOOST_CHECK(result.isMember("contracts")); + // This used to test that it is a member, but we did not actually request any output, + // so there should not be a contract member. + BOOST_CHECK(!result.isMember("contracts")); } BOOST_AUTO_TEST_SUITE_END() -- cgit