mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
CLI: Add checks for invalid output-modes for --import-asm-json.
This commit is contained in:
parent
00f034362b
commit
0c0853e635
@ -161,7 +161,11 @@ static bool coloredOutput(CommandLineOptions const& _options)
|
|||||||
|
|
||||||
void CommandLineInterface::handleBinary(string const& _contract)
|
void CommandLineInterface::handleBinary(string const& _contract)
|
||||||
{
|
{
|
||||||
solAssert(m_options.input.mode == InputMode::Compiler || m_options.input.mode == InputMode::CompilerWithASTImport, "");
|
solAssert(
|
||||||
|
m_options.input.mode == InputMode::Compiler ||
|
||||||
|
m_options.input.mode == InputMode::CompilerWithASTImport ||
|
||||||
|
m_options.input.mode == InputMode::CompilerWithEvmAssemblyJsonImport, ""
|
||||||
|
);
|
||||||
|
|
||||||
if (m_options.compiler.outputs.binary)
|
if (m_options.compiler.outputs.binary)
|
||||||
{
|
{
|
||||||
@ -187,7 +191,11 @@ void CommandLineInterface::handleBinary(string const& _contract)
|
|||||||
|
|
||||||
void CommandLineInterface::handleOpcode(string const& _contract)
|
void CommandLineInterface::handleOpcode(string const& _contract)
|
||||||
{
|
{
|
||||||
solAssert(m_options.input.mode == InputMode::Compiler || m_options.input.mode == InputMode::CompilerWithASTImport, "");
|
solAssert(
|
||||||
|
m_options.input.mode == InputMode::Compiler ||
|
||||||
|
m_options.input.mode == InputMode::CompilerWithASTImport ||
|
||||||
|
m_options.input.mode == InputMode::CompilerWithEvmAssemblyJsonImport, ""
|
||||||
|
);
|
||||||
|
|
||||||
if (!m_options.output.dir.empty())
|
if (!m_options.output.dir.empty())
|
||||||
createFile(m_compiler->filesystemFriendlyName(_contract) + ".opcode", evmasm::disassemble(m_compiler->object(_contract).bytecode));
|
createFile(m_compiler->filesystemFriendlyName(_contract) + ".opcode", evmasm::disassemble(m_compiler->object(_contract).bytecode));
|
||||||
|
@ -455,6 +455,13 @@ void CommandLineParser::parseOutputSelection()
|
|||||||
CompilerOutputs::componentName(&CompilerOutputs::ewasm),
|
CompilerOutputs::componentName(&CompilerOutputs::ewasm),
|
||||||
CompilerOutputs::componentName(&CompilerOutputs::ewasmIR),
|
CompilerOutputs::componentName(&CompilerOutputs::ewasmIR),
|
||||||
};
|
};
|
||||||
|
static set<string> const evmAssemblyJsonImportModeOutputs = {
|
||||||
|
CompilerOutputs::componentName(&CompilerOutputs::asm_),
|
||||||
|
CompilerOutputs::componentName(&CompilerOutputs::binary),
|
||||||
|
CompilerOutputs::componentName(&CompilerOutputs::binaryRuntime),
|
||||||
|
CompilerOutputs::componentName(&CompilerOutputs::opcodes),
|
||||||
|
CompilerOutputs::componentName(&CompilerOutputs::asmJson),
|
||||||
|
};
|
||||||
|
|
||||||
switch (_mode)
|
switch (_mode)
|
||||||
{
|
{
|
||||||
@ -465,8 +472,9 @@ void CommandLineParser::parseOutputSelection()
|
|||||||
solAssert(false);
|
solAssert(false);
|
||||||
case InputMode::Compiler:
|
case InputMode::Compiler:
|
||||||
case InputMode::CompilerWithASTImport:
|
case InputMode::CompilerWithASTImport:
|
||||||
case InputMode::CompilerWithEvmAssemblyJsonImport:
|
|
||||||
return util::contains(compilerModeOutputs, _outputName);
|
return util::contains(compilerModeOutputs, _outputName);
|
||||||
|
case InputMode::CompilerWithEvmAssemblyJsonImport:
|
||||||
|
return util::contains(evmAssemblyJsonImportModeOutputs, _outputName);
|
||||||
case InputMode::Assembler:
|
case InputMode::Assembler:
|
||||||
return util::contains(assemblerModeOutputs, _outputName);
|
return util::contains(assemblerModeOutputs, _outputName);
|
||||||
case InputMode::StandardJson:
|
case InputMode::StandardJson:
|
||||||
@ -936,7 +944,6 @@ void CommandLineParser::processArgs()
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
checkMutuallyExclusive({g_strColor, g_strNoColor});
|
checkMutuallyExclusive({g_strColor, g_strNoColor});
|
||||||
|
|
||||||
array<string, 9> const conflictingWithStopAfter{
|
array<string, 9> const conflictingWithStopAfter{
|
||||||
CompilerOutputs::componentName(&CompilerOutputs::binary),
|
CompilerOutputs::componentName(&CompilerOutputs::binary),
|
||||||
CompilerOutputs::componentName(&CompilerOutputs::ir),
|
CompilerOutputs::componentName(&CompilerOutputs::ir),
|
||||||
@ -952,9 +959,27 @@ void CommandLineParser::processArgs()
|
|||||||
for (auto& option: conflictingWithStopAfter)
|
for (auto& option: conflictingWithStopAfter)
|
||||||
checkMutuallyExclusive({g_strStopAfter, option});
|
checkMutuallyExclusive({g_strStopAfter, option});
|
||||||
|
|
||||||
|
array<string, 11> const conflictingWithAsmJsonImport{
|
||||||
|
CompilerOutputs::componentName(&CompilerOutputs::ir),
|
||||||
|
CompilerOutputs::componentName(&CompilerOutputs::irOptimized),
|
||||||
|
CompilerOutputs::componentName(&CompilerOutputs::ewasm),
|
||||||
|
CompilerOutputs::componentName(&CompilerOutputs::ewasmIR),
|
||||||
|
g_strGas,
|
||||||
|
CompilerOutputs::componentName(&CompilerOutputs::metadata),
|
||||||
|
CompilerOutputs::componentName(&CompilerOutputs::natspecDev),
|
||||||
|
CompilerOutputs::componentName(&CompilerOutputs::natspecUser),
|
||||||
|
CompilerOutputs::componentName(&CompilerOutputs::signatureHashes),
|
||||||
|
CompilerOutputs::componentName(&CompilerOutputs::storageLayout),
|
||||||
|
CompilerOutputs::componentName(&CompilerOutputs::astCompactJson),
|
||||||
|
};
|
||||||
|
|
||||||
|
for (auto& option: conflictingWithAsmJsonImport)
|
||||||
|
checkMutuallyExclusive({g_strImportEvmAssemblerJson, option});
|
||||||
|
|
||||||
if (
|
if (
|
||||||
m_options.input.mode != InputMode::Compiler &&
|
m_options.input.mode != InputMode::Compiler &&
|
||||||
m_options.input.mode != InputMode::CompilerWithASTImport &&
|
m_options.input.mode != InputMode::CompilerWithASTImport &&
|
||||||
|
m_options.input.mode != InputMode::CompilerWithEvmAssemblyJsonImport &&
|
||||||
m_options.input.mode != InputMode::Assembler
|
m_options.input.mode != InputMode::Assembler
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user