Skip to content

Commit 5b3c7c7

Browse files
committed
CLI: Add checks for invalid output-modes for --import-asm-json.
1 parent fd98d3e commit 5b3c7c7

File tree

2 files changed

+37
-4
lines changed

2 files changed

+37
-4
lines changed

solc/CommandLineInterface.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,11 @@ static bool coloredOutput(CommandLineOptions const& _options)
161161

162162
void CommandLineInterface::handleBinary(string const& _contract)
163163
{
164-
solAssert(m_options.input.mode == InputMode::Compiler || m_options.input.mode == InputMode::CompilerWithASTImport, "");
164+
solAssert(
165+
m_options.input.mode == InputMode::Compiler ||
166+
m_options.input.mode == InputMode::CompilerWithASTImport ||
167+
m_options.input.mode == InputMode::CompilerWithEvmAssemblyJsonImport, ""
168+
);
165169

166170
if (m_options.compiler.outputs.binary)
167171
{
@@ -187,7 +191,11 @@ void CommandLineInterface::handleBinary(string const& _contract)
187191

188192
void CommandLineInterface::handleOpcode(string const& _contract)
189193
{
190-
solAssert(m_options.input.mode == InputMode::Compiler || m_options.input.mode == InputMode::CompilerWithASTImport, "");
194+
solAssert(
195+
m_options.input.mode == InputMode::Compiler ||
196+
m_options.input.mode == InputMode::CompilerWithASTImport ||
197+
m_options.input.mode == InputMode::CompilerWithEvmAssemblyJsonImport, ""
198+
);
191199

192200
if (!m_options.output.dir.empty())
193201
createFile(m_compiler->filesystemFriendlyName(_contract) + ".opcode", evmasm::disassemble(m_compiler->object(_contract).bytecode));

solc/CommandLineParser.cpp

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -455,6 +455,13 @@ void CommandLineParser::parseOutputSelection()
455455
CompilerOutputs::componentName(&CompilerOutputs::ewasm),
456456
CompilerOutputs::componentName(&CompilerOutputs::ewasmIR),
457457
};
458+
static set<string> const evmAssemblyJsonImportModeOutputs = {
459+
CompilerOutputs::componentName(&CompilerOutputs::asm_),
460+
CompilerOutputs::componentName(&CompilerOutputs::binary),
461+
CompilerOutputs::componentName(&CompilerOutputs::binaryRuntime),
462+
CompilerOutputs::componentName(&CompilerOutputs::opcodes),
463+
CompilerOutputs::componentName(&CompilerOutputs::asmJson),
464+
};
458465

459466
switch (_mode)
460467
{
@@ -465,8 +472,9 @@ void CommandLineParser::parseOutputSelection()
465472
solAssert(false);
466473
case InputMode::Compiler:
467474
case InputMode::CompilerWithASTImport:
468-
case InputMode::CompilerWithEvmAssemblyJsonImport:
469475
return contains(compilerModeOutputs, _outputName);
476+
case InputMode::CompilerWithEvmAssemblyJsonImport:
477+
return contains(evmAssemblyJsonImportModeOutputs, _outputName);
470478
case InputMode::Assembler:
471479
return contains(assemblerModeOutputs, _outputName);
472480
case InputMode::StandardJson:
@@ -936,7 +944,6 @@ void CommandLineParser::processArgs()
936944
return;
937945

938946
checkMutuallyExclusive({g_strColor, g_strNoColor});
939-
940947
array<string, 9> const conflictingWithStopAfter{
941948
CompilerOutputs::componentName(&CompilerOutputs::binary),
942949
CompilerOutputs::componentName(&CompilerOutputs::ir),
@@ -952,9 +959,27 @@ void CommandLineParser::processArgs()
952959
for (auto& option: conflictingWithStopAfter)
953960
checkMutuallyExclusive({g_strStopAfter, option});
954961

962+
array<string, 11> const conflictingWithAsmJsonImport{
963+
CompilerOutputs::componentName(&CompilerOutputs::ir),
964+
CompilerOutputs::componentName(&CompilerOutputs::irOptimized),
965+
CompilerOutputs::componentName(&CompilerOutputs::ewasm),
966+
CompilerOutputs::componentName(&CompilerOutputs::ewasmIR),
967+
g_strGas,
968+
CompilerOutputs::componentName(&CompilerOutputs::metadata),
969+
CompilerOutputs::componentName(&CompilerOutputs::natspecDev),
970+
CompilerOutputs::componentName(&CompilerOutputs::natspecUser),
971+
CompilerOutputs::componentName(&CompilerOutputs::signatureHashes),
972+
CompilerOutputs::componentName(&CompilerOutputs::storageLayout),
973+
CompilerOutputs::componentName(&CompilerOutputs::astCompactJson),
974+
};
975+
976+
for (auto& option: conflictingWithAsmJsonImport)
977+
checkMutuallyExclusive({g_strImportEvmAssemblerJson, option});
978+
955979
if (
956980
m_options.input.mode != InputMode::Compiler &&
957981
m_options.input.mode != InputMode::CompilerWithASTImport &&
982+
m_options.input.mode != InputMode::CompilerWithEvmAssemblyJsonImport &&
958983
m_options.input.mode != InputMode::Assembler
959984
)
960985
{

0 commit comments

Comments
 (0)