mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #1611 from ethereum/metadata-literal-sources
Add option to keep literal sources in metadata
This commit is contained in:
commit
78d70b98f7
@ -6,6 +6,7 @@ Features:
|
|||||||
* AST: Use deterministic node identifiers.
|
* AST: Use deterministic node identifiers.
|
||||||
* Type system: Introduce type identifier strings.
|
* Type system: Introduce type identifier strings.
|
||||||
* Metadata: Do not include platform in the version number.
|
* Metadata: Do not include platform in the version number.
|
||||||
|
* Metadata: Add option to store sources as literal content.
|
||||||
* Code generator: Extract array utils into low-level functions.
|
* Code generator: Extract array utils into low-level functions.
|
||||||
|
|
||||||
Bugfixes:
|
Bugfixes:
|
||||||
|
@ -726,11 +726,16 @@ string CompilerStack::createOnChainMetadata(Contract const& _contract) const
|
|||||||
solAssert(s.second.scanner, "Scanner not available");
|
solAssert(s.second.scanner, "Scanner not available");
|
||||||
meta["sources"][s.first]["keccak256"] =
|
meta["sources"][s.first]["keccak256"] =
|
||||||
"0x" + toHex(dev::keccak256(s.second.scanner->source()).asBytes());
|
"0x" + toHex(dev::keccak256(s.second.scanner->source()).asBytes());
|
||||||
|
if (m_metadataLiteralSources)
|
||||||
|
meta["sources"][s.first]["content"] = s.second.scanner->source();
|
||||||
|
else
|
||||||
|
{
|
||||||
meta["sources"][s.first]["urls"] = Json::arrayValue;
|
meta["sources"][s.first]["urls"] = Json::arrayValue;
|
||||||
meta["sources"][s.first]["urls"].append(
|
meta["sources"][s.first]["urls"].append(
|
||||||
"bzzr://" + toHex(dev::swarmHash(s.second.scanner->source()).asBytes())
|
"bzzr://" + toHex(dev::swarmHash(s.second.scanner->source()).asBytes())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
meta["settings"]["optimizer"]["enabled"] = m_optimize;
|
meta["settings"]["optimizer"]["enabled"] = m_optimize;
|
||||||
meta["settings"]["optimizer"]["runs"] = m_optimizeRuns;
|
meta["settings"]["optimizer"]["runs"] = m_optimizeRuns;
|
||||||
meta["settings"]["compilationTarget"][_contract.contract->sourceUnitName()] =
|
meta["settings"]["compilationTarget"][_contract.contract->sourceUnitName()] =
|
||||||
|
@ -177,6 +177,7 @@ public:
|
|||||||
/// Can be one of 4 types defined at @c DocumentationType
|
/// Can be one of 4 types defined at @c DocumentationType
|
||||||
Json::Value const& metadata(std::string const& _contractName, DocumentationType _type) const;
|
Json::Value const& metadata(std::string const& _contractName, DocumentationType _type) const;
|
||||||
std::string const& onChainMetadata(std::string const& _contractName) const;
|
std::string const& onChainMetadata(std::string const& _contractName) const;
|
||||||
|
void useMetadataLiteralSources(bool _metadataLiteralSources) { m_metadataLiteralSources = _metadataLiteralSources; }
|
||||||
|
|
||||||
/// @returns the previously used scanner, useful for counting lines during error reporting.
|
/// @returns the previously used scanner, useful for counting lines during error reporting.
|
||||||
Scanner const& scanner(std::string const& _sourceName = "") const;
|
Scanner const& scanner(std::string const& _sourceName = "") const;
|
||||||
@ -274,6 +275,7 @@ private:
|
|||||||
std::map<std::string const, Contract> m_contracts;
|
std::map<std::string const, Contract> m_contracts;
|
||||||
std::string m_formalTranslation;
|
std::string m_formalTranslation;
|
||||||
ErrorList m_errors;
|
ErrorList m_errors;
|
||||||
|
bool m_metadataLiteralSources = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -98,6 +98,7 @@ static string const g_strSrcMap = "srcmap";
|
|||||||
static string const g_strSrcMapRuntime = "srcmap-runtime";
|
static string const g_strSrcMapRuntime = "srcmap-runtime";
|
||||||
static string const g_strVersion = "version";
|
static string const g_strVersion = "version";
|
||||||
static string const g_stdinFileNameStr = "<stdin>";
|
static string const g_stdinFileNameStr = "<stdin>";
|
||||||
|
static string const g_strMetadataLiteral = "metadata-literal";
|
||||||
|
|
||||||
static string const g_argAbi = g_strAbi;
|
static string const g_argAbi = g_strAbi;
|
||||||
static string const g_argAddStandard = g_strAddStandard;
|
static string const g_argAddStandard = g_strAddStandard;
|
||||||
@ -126,6 +127,7 @@ static string const g_argOutputDir = g_strOutputDir;
|
|||||||
static string const g_argSignatureHashes = g_strSignatureHashes;
|
static string const g_argSignatureHashes = g_strSignatureHashes;
|
||||||
static string const g_argVersion = g_strVersion;
|
static string const g_argVersion = g_strVersion;
|
||||||
static string const g_stdinFileName = g_stdinFileNameStr;
|
static string const g_stdinFileName = g_stdinFileNameStr;
|
||||||
|
static string const g_argMetadataLiteral = g_strMetadataLiteral;
|
||||||
|
|
||||||
/// Possible arguments to for --combined-json
|
/// Possible arguments to for --combined-json
|
||||||
static set<string> const g_combinedJsonArgs{
|
static set<string> const g_combinedJsonArgs{
|
||||||
@ -511,7 +513,8 @@ Allowed options)",
|
|||||||
g_argLink.c_str(),
|
g_argLink.c_str(),
|
||||||
"Switch to linker mode, ignoring all options apart from --libraries "
|
"Switch to linker mode, ignoring all options apart from --libraries "
|
||||||
"and modify binaries in place."
|
"and modify binaries in place."
|
||||||
);
|
)
|
||||||
|
(g_argMetadataLiteral.c_str(), "Store referenced sources are literal data in the metadata output.");
|
||||||
po::options_description outputComponents("Output Components");
|
po::options_description outputComponents("Output Components");
|
||||||
outputComponents.add_options()
|
outputComponents.add_options()
|
||||||
(g_argAst.c_str(), "AST of all source files.")
|
(g_argAst.c_str(), "AST of all source files.")
|
||||||
@ -634,6 +637,8 @@ bool CommandLineInterface::processInput()
|
|||||||
auto scannerFromSourceName = [&](string const& _sourceName) -> solidity::Scanner const& { return m_compiler->scanner(_sourceName); };
|
auto scannerFromSourceName = [&](string const& _sourceName) -> solidity::Scanner const& { return m_compiler->scanner(_sourceName); };
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
if (m_args.count(g_argMetadataLiteral) > 0)
|
||||||
|
m_compiler->useMetadataLiteralSources(true);
|
||||||
if (m_args.count(g_argInputFile))
|
if (m_args.count(g_argInputFile))
|
||||||
m_compiler->setRemappings(m_args[g_argInputFile].as<vector<string>>());
|
m_compiler->setRemappings(m_args[g_argInputFile].as<vector<string>>());
|
||||||
for (auto const& sourceCode: m_sourceCodes)
|
for (auto const& sourceCode: m_sourceCodes)
|
||||||
|
Loading…
Reference in New Issue
Block a user