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) 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));

View File

@ -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
) )
{ {