MCPcopy Create free account
hub / github.com/argotorg/solidity / handleCombinedJSON

Method handleCombinedJSON

solc/CommandLineInterface.cpp:1047–1157  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1045}
1046
1047void CommandLineInterface::handleCombinedJSON()
1048{
1049 solAssert(m_assemblyStack);
1050 solAssert(
1051 CompilerInputModes.count(m_options.input.mode) == 1 ||
1052 m_options.input.mode == frontend::InputMode::EVMAssemblerJSON
1053 );
1054
1055 if (!m_options.compiler.combinedJsonRequests.has_value())
1056 return;
1057
1058 Json output;
1059
1060 output[g_strVersion] = frontend::VersionString;
1061 std::vector<std::string> contracts = m_assemblyStack->contractNames();
1062
1063 if (!contracts.empty())
1064 output[g_strContracts] = Json::object();
1065 for (std::string const& contractName: contracts)
1066 {
1067 Json& contractData = output[g_strContracts][contractName] = Json::object();
1068
1069 // NOTE: The state checks here are more strict that in Standard JSON. There we allow
1070 // requesting certain outputs even if compilation fails as long as analysis went ok.
1071 if (m_compiler && m_compiler->compilationSuccessful())
1072 {
1073 if (m_options.compiler.combinedJsonRequests->abi)
1074 contractData[g_strAbi] = m_compiler->contractABI(contractName);
1075 if (m_options.compiler.combinedJsonRequests->metadata)
1076 contractData["metadata"] = m_compiler->metadata(contractName);
1077 if (m_options.compiler.combinedJsonRequests->storageLayout)
1078 contractData[g_strStorageLayout] = m_compiler->storageLayout(contractName);
1079 if (m_options.compiler.combinedJsonRequests->transientStorageLayout)
1080 contractData[g_strTransientStorageLayout] = m_compiler->transientStorageLayout(contractName);
1081 if (m_options.compiler.combinedJsonRequests->generatedSources)
1082 contractData[g_strGeneratedSources] = m_compiler->generatedSources(contractName, false);
1083 if (m_options.compiler.combinedJsonRequests->generatedSourcesRuntime)
1084 contractData[g_strGeneratedSourcesRuntime] = m_compiler->generatedSources(contractName, true);
1085 if (m_options.compiler.combinedJsonRequests->signatureHashes)
1086 contractData[g_strSignatureHashes] = m_compiler->interfaceSymbols(contractName)["methods"];
1087 if (m_options.compiler.combinedJsonRequests->natspecDev)
1088 contractData[g_strNatspecDev] = m_compiler->natspecDev(contractName);
1089 if (m_options.compiler.combinedJsonRequests->natspecUser)
1090 contractData[g_strNatspecUser] = m_compiler->natspecUser(contractName);
1091 }
1092
1093 if (m_assemblyStack->compilationSuccessful())
1094 {
1095 if (m_options.compiler.combinedJsonRequests->binary)
1096 contractData[g_strBinary] = m_assemblyStack->object(contractName).toHex();
1097 if (m_options.compiler.combinedJsonRequests->binaryRuntime)
1098 contractData[g_strBinaryRuntime] = m_assemblyStack->runtimeObject(contractName).toHex();
1099 if (m_options.compiler.combinedJsonRequests->opcodes)
1100 contractData[g_strOpcodes] = evmasm::disassemble(m_assemblyStack->object(contractName).bytecode, m_options.output.evmVersion);
1101 if (m_options.compiler.combinedJsonRequests->asm_)
1102 contractData[g_strAsm] = m_assemblyStack->assemblyJSON(contractName);
1103 if (m_options.compiler.combinedJsonRequests->srcMap)
1104 {

Callers

nothing calls this directly

Calls 15

ASTJsonExporterClass · 0.85
jsonPrintFunction · 0.85
removeNullMembersFunction · 0.85
generatedSourcesMethod · 0.80
interfaceSymbolsMethod · 0.80
objectMethod · 0.80
atMethod · 0.80
countMethod · 0.45
contractNamesMethod · 0.45
emptyMethod · 0.45
compilationSuccessfulMethod · 0.45
toHexMethod · 0.45

Tested by

no test coverage detected