diff --git a/solc/CommandLineParser.cpp b/solc/CommandLineParser.cpp index ac102bcd7..cf974d360 100644 --- a/solc/CommandLineParser.cpp +++ b/solc/CommandLineParser.cpp @@ -61,6 +61,7 @@ static string const g_strLicense = "license"; static string const g_strLibraries = "libraries"; static string const g_strLink = "link"; static string const g_strLSP = "lsp"; +static string const g_strMachine = "machine"; static string const g_strNoCBORMetadata = "no-cbor-metadata"; static string const g_strMetadataHash = "metadata-hash"; static string const g_strMetadataLiteral = "metadata-literal"; @@ -109,6 +110,12 @@ static string const g_strColor = "color"; static string const g_strNoColor = "no-color"; static string const g_strErrorIds = "error-codes"; +/// Possible arguments to for --machine +static set const g_machineArgs +{ + g_strEVM +}; + /// Possible arguments to for --yul-dialect static set const g_yulDialectArgs { @@ -667,6 +674,11 @@ General Information)").c_str(), po::options_description assemblyModeOptions("Assembly Mode Options"); assemblyModeOptions.add_options() + ( + g_strMachine.c_str(), + po::value()->value_name(util::joinHumanReadable(g_machineArgs, ",")), + "Target machine in assembly or Yul mode." + ) ( g_strYulDialect.c_str(), po::value()->value_name(util::joinHumanReadable(g_yulDialectArgs, ",")), @@ -1197,6 +1209,12 @@ void CommandLineParser::processArgs() using Input = yul::YulStack::Language; m_options.assembly.inputLanguage = m_args.count(g_strYul) ? Input::Yul : (m_args.count(g_strStrictAssembly) ? Input::StrictAssembly : Input::Assembly); + if (m_args.count(g_strMachine)) + { + string machine = m_args[g_strMachine].as(); + if (machine != g_strEVM) + solThrow(CommandLineValidationError, "Invalid option for --" + g_strMachine + ": " + machine); + } if (m_args.count(g_strYulDialect)) { string dialect = m_args[g_strYulDialect].as(); @@ -1212,10 +1230,10 @@ void CommandLineParser::processArgs() ); return; } - else if (countEnabledOptions({g_strYulDialect}) >= 1) + else if (countEnabledOptions({g_strYulDialect, g_strMachine}) >= 1) solThrow( CommandLineValidationError, - "--" + g_strYulDialect + " is only valid in assembly mode." + "--" + g_strYulDialect + " and --" + g_strMachine + " are only valid in assembly mode." ); if (m_args.count(g_strMetadataHash)) diff --git a/test/cmdlineTests/strict_asm_options_in_non_asm_mode/err b/test/cmdlineTests/strict_asm_options_in_non_asm_mode/err index b6ede376a..6d67f2b5b 100644 --- a/test/cmdlineTests/strict_asm_options_in_non_asm_mode/err +++ b/test/cmdlineTests/strict_asm_options_in_non_asm_mode/err @@ -1 +1 @@ ---yul-dialect is only valid in assembly mode. +--yul-dialect and --machine are only valid in assembly mode.