CLI: Add checks for invalid output-modes for --import-asm-json.

This commit is contained in:
Alexander Arlt 2022-03-09 16:51:08 -05:00
parent 00f034362b
commit 0c0853e635
2 changed files with 37 additions and 4 deletions

View File

@ -161,7 +161,11 @@ static bool coloredOutput(CommandLineOptions const& _options)
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)
{
@ -187,7 +191,11 @@ void CommandLineInterface::handleBinary(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())
createFile(m_compiler->filesystemFriendlyName(_contract) + ".opcode", evmasm::disassemble(m_compiler->object(_contract).bytecode));

View File

@ -455,6 +455,13 @@ void CommandLineParser::parseOutputSelection()
CompilerOutputs::componentName(&CompilerOutputs::ewasm),
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)
{
@ -465,8 +472,9 @@ void CommandLineParser::parseOutputSelection()
solAssert(false);
case InputMode::Compiler:
case InputMode::CompilerWithASTImport:
case InputMode::CompilerWithEvmAssemblyJsonImport:
return util::contains(compilerModeOutputs, _outputName);
case InputMode::CompilerWithEvmAssemblyJsonImport:
return util::contains(evmAssemblyJsonImportModeOutputs, _outputName);
case InputMode::Assembler:
return util::contains(assemblerModeOutputs, _outputName);
case InputMode::StandardJson:
@ -936,7 +944,6 @@ void CommandLineParser::processArgs()
return;
checkMutuallyExclusive({g_strColor, g_strNoColor});
array<string, 9> const conflictingWithStopAfter{
CompilerOutputs::componentName(&CompilerOutputs::binary),
CompilerOutputs::componentName(&CompilerOutputs::ir),
@ -952,9 +959,27 @@ void CommandLineParser::processArgs()
for (auto& option: conflictingWithStopAfter)
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 (
m_options.input.mode != InputMode::Compiler &&
m_options.input.mode != InputMode::CompilerWithASTImport &&
m_options.input.mode != InputMode::CompilerWithEvmAssemblyJsonImport &&
m_options.input.mode != InputMode::Assembler
)
{