Skip to content

Commit 9721c82

Browse files
committed
[solc] Improve parameter checks for --import-asm-json.
1 parent ed9c09b commit 9721c82

File tree

3 files changed

+50
-28
lines changed

3 files changed

+50
-28
lines changed

solc/CommandLineInterface.cpp

Lines changed: 23 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -205,8 +205,7 @@ void CommandLineInterface::handleIR(string const& _contractName)
205205
{
206206
solAssert(
207207
m_options.input.mode == InputMode::Compiler ||
208-
m_options.input.mode == InputMode::CompilerWithASTImport ||
209-
m_options.input.mode == InputMode::CompilerWithEvmAssemblyJsonImport , ""
208+
m_options.input.mode == InputMode::CompilerWithASTImport
210209
);
211210

212211
if (!m_options.compiler.outputs.ir)
@@ -225,8 +224,7 @@ void CommandLineInterface::handleIROptimized(string const& _contractName)
225224
{
226225
solAssert(
227226
m_options.input.mode == InputMode::Compiler ||
228-
m_options.input.mode == InputMode::CompilerWithASTImport ||
229-
m_options.input.mode == InputMode::CompilerWithEvmAssemblyJsonImport , ""
227+
m_options.input.mode == InputMode::CompilerWithASTImport
230228
);
231229

232230
if (!m_options.compiler.outputs.irOptimized)
@@ -245,8 +243,7 @@ void CommandLineInterface::handleEwasm(string const& _contractName)
245243
{
246244
solAssert(
247245
m_options.input.mode == InputMode::Compiler ||
248-
m_options.input.mode == InputMode::CompilerWithASTImport ||
249-
m_options.input.mode == InputMode::CompilerWithEvmAssemblyJsonImport , ""
246+
m_options.input.mode == InputMode::CompilerWithASTImport
250247
);
251248

252249
if (!m_options.compiler.outputs.ewasm)
@@ -286,8 +283,7 @@ void CommandLineInterface::handleSignatureHashes(string const& _contract)
286283
{
287284
solAssert(
288285
m_options.input.mode == InputMode::Compiler ||
289-
m_options.input.mode == InputMode::CompilerWithASTImport ||
290-
m_options.input.mode == InputMode::CompilerWithEvmAssemblyJsonImport , ""
286+
m_options.input.mode == InputMode::CompilerWithASTImport
291287
);
292288

293289
if (!m_options.compiler.outputs.signatureHashes)
@@ -326,8 +322,7 @@ void CommandLineInterface::handleABI(string const& _contract)
326322
{
327323
solAssert(
328324
m_options.input.mode == InputMode::Compiler ||
329-
m_options.input.mode == InputMode::CompilerWithASTImport ||
330-
m_options.input.mode == InputMode::CompilerWithEvmAssemblyJsonImport , ""
325+
m_options.input.mode == InputMode::CompilerWithASTImport
331326
);
332327

333328
if (!m_options.compiler.outputs.abi)
@@ -344,8 +339,7 @@ void CommandLineInterface::handleStorageLayout(string const& _contract)
344339
{
345340
solAssert(
346341
m_options.input.mode == InputMode::Compiler ||
347-
m_options.input.mode == InputMode::CompilerWithASTImport ||
348-
m_options.input.mode == InputMode::CompilerWithEvmAssemblyJsonImport , ""
342+
m_options.input.mode == InputMode::CompilerWithASTImport
349343
);
350344

351345
if (!m_options.compiler.outputs.storageLayout)
@@ -362,8 +356,7 @@ void CommandLineInterface::handleNatspec(bool _natspecDev, string const& _contra
362356
{
363357
solAssert(
364358
m_options.input.mode == InputMode::Compiler ||
365-
m_options.input.mode == InputMode::CompilerWithASTImport ||
366-
m_options.input.mode == InputMode::CompilerWithEvmAssemblyJsonImport , ""
359+
m_options.input.mode == InputMode::CompilerWithASTImport
367360
);
368361

369362
bool enabled = false;
@@ -942,8 +935,7 @@ void CommandLineInterface::handleAst()
942935
{
943936
solAssert(
944937
m_options.input.mode == InputMode::Compiler ||
945-
m_options.input.mode == InputMode::CompilerWithASTImport ||
946-
m_options.input.mode == InputMode::CompilerWithEvmAssemblyJsonImport, ""
938+
m_options.input.mode == InputMode::CompilerWithASTImport
947939
);
948940

949941
if (!m_options.compiler.outputs.astCompactJson)
@@ -1193,7 +1185,8 @@ void CommandLineInterface::outputCompilationResults()
11931185
handleCombinedJSON();
11941186

11951187
// do we need AST output?
1196-
handleAst();
1188+
if (m_options.input.mode != InputMode::CompilerWithEvmAssemblyJsonImport)
1189+
handleAst();
11971190

11981191
if (
11991192
!m_compiler->compilationSuccessful() &&
@@ -1233,15 +1226,19 @@ void CommandLineInterface::outputCompilationResults()
12331226
handleGasEstimation(contract);
12341227

12351228
handleBytecode(contract);
1236-
handleIR(contract);
1237-
handleIROptimized(contract);
1238-
handleEwasm(contract);
1239-
handleSignatureHashes(contract);
1240-
handleMetadata(contract);
1241-
handleABI(contract);
1242-
handleStorageLayout(contract);
1243-
handleNatspec(true, contract);
1244-
handleNatspec(false, contract);
1229+
1230+
if (m_options.input.mode != InputMode::CompilerWithEvmAssemblyJsonImport)
1231+
{
1232+
handleIR(contract);
1233+
handleIROptimized(contract);
1234+
handleEwasm(contract);
1235+
handleSignatureHashes(contract);
1236+
handleMetadata(contract);
1237+
handleABI(contract);
1238+
handleStorageLayout(contract);
1239+
handleNatspec(true, contract);
1240+
handleNatspec(false, contract);
1241+
}
12451242
} // end of contracts iteration
12461243

12471244
if (!m_hasOutput)

solc/CommandLineParser.cpp

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -475,6 +475,12 @@ bool CommandLineParser::parseOutputSelection()
475475
CompilerOutputs::componentName(&CompilerOutputs::ewasm),
476476
CompilerOutputs::componentName(&CompilerOutputs::ewasmIR),
477477
};
478+
static set<string> const assemblyJsonImportModeOutputs = {
479+
CompilerOutputs::componentName(&CompilerOutputs::asm_),
480+
CompilerOutputs::componentName(&CompilerOutputs::binary),
481+
CompilerOutputs::componentName(&CompilerOutputs::binaryRuntime),
482+
CompilerOutputs::componentName(&CompilerOutputs::opcodes),
483+
};
478484

479485
switch (_mode)
480486
{
@@ -483,9 +489,10 @@ bool CommandLineParser::parseOutputSelection()
483489
case InputMode::Version:
484490
solAssert(false);
485491
case InputMode::Compiler:
486-
case InputMode::CompilerWithEvmAssemblyJsonImport:
487492
case InputMode::CompilerWithASTImport:
488493
return contains(compilerModeOutputs, _outputName);
494+
case InputMode::CompilerWithEvmAssemblyJsonImport:
495+
return contains(assemblyJsonImportModeOutputs, _outputName);
489496
case InputMode::Assembler:
490497
return contains(assemblerModeOutputs, _outputName);
491498
case InputMode::StandardJson:
@@ -1360,7 +1367,13 @@ bool CommandLineParser::parseCombinedJsonOption()
13601367

13611368
set<string> requests;
13621369
for (string const& item: boost::split(requests, m_args[g_strCombinedJson].as<string>(), boost::is_any_of(",")))
1363-
if (CombinedJsonRequests::componentMap().count(item) == 0)
1370+
if (m_options.input.mode == InputMode::CompilerWithEvmAssemblyJsonImport &&
1371+
CombinedJsonRequests::componentMapAssemblyJsonImport().count(item) == 0)
1372+
{
1373+
serr() << "Invalid option to --" << g_strCombinedJson << ": " << item << ", for --" << g_strImportEvmAssemblerJson << endl;
1374+
return false;
1375+
}
1376+
else if (CombinedJsonRequests::componentMap().count(item) == 0)
13641377
{
13651378
serr() << "Invalid option to --" << g_strCombinedJson << ": " << item << endl;
13661379
return false;

solc/CommandLineParser.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,18 @@ struct CombinedJsonRequests
114114
friend std::ostream& operator<<(std::ostream& _out, CombinedJsonRequests const& _requests);
115115

116116
static std::string const& componentName(bool CombinedJsonRequests::* _component);
117+
static auto const& componentMapAssemblyJsonImport()
118+
{
119+
static std::map<std::string, bool CombinedJsonRequests::*> const components = {
120+
{"bin", &CombinedJsonRequests::binary},
121+
{"bin-runtime", &CombinedJsonRequests::binaryRuntime},
122+
{"opcodes", &CombinedJsonRequests::opcodes},
123+
{"asm", &CombinedJsonRequests::asm_},
124+
{"srcmap", &CombinedJsonRequests::srcMap},
125+
{"srcmap-runtime", &CombinedJsonRequests::srcMapRuntime},
126+
};
127+
return components;
128+
}
117129
static auto const& componentMap()
118130
{
119131
static std::map<std::string, bool CombinedJsonRequests::*> const components = {

0 commit comments

Comments
 (0)