From 206a2c183fd31b680f3ff4f3b8b341198dfb0172 Mon Sep 17 00:00:00 2001 From: Alexander Arlt Date: Thu, 23 Feb 2023 12:04:41 -0500 Subject: [PATCH] Remove YulStack::Machine enum. --- libyul/YulStack.cpp | 10 ++---- libyul/YulStack.h | 3 +- solc/CommandLineInterface.cpp | 9 +++--- solc/CommandLineInterface.h | 2 +- solc/CommandLineParser.cpp | 32 +++---------------- solc/CommandLineParser.h | 1 - .../strict_asm_options_in_non_asm_mode/args | 2 +- .../strict_asm_options_in_non_asm_mode/err | 2 +- test/libsolidity/InlineAssembly.cpp | 14 +++----- .../SolidityExecutionFramework.cpp | 2 +- test/libyul/ObjectCompilerTest.cpp | 2 +- test/solc/CommandLineParser.cpp | 20 +++++------- .../ossfuzz/strictasm_assembly_ossfuzz.cpp | 2 +- 13 files changed, 31 insertions(+), 70 deletions(-) diff --git a/libyul/YulStack.cpp b/libyul/YulStack.cpp index a4f961564..bb154eef3 100644 --- a/libyul/YulStack.cpp +++ b/libyul/YulStack.cpp @@ -171,20 +171,14 @@ void YulStack::optimize(Object& _object, bool _isCreation) ); } -MachineAssemblyObject YulStack::assemble(Machine _machine) const +MachineAssemblyObject YulStack::assemble() const { yulAssert(m_analysisSuccessful, ""); yulAssert(m_parserResult, ""); yulAssert(m_parserResult->code, ""); yulAssert(m_parserResult->analysisInfo, ""); - switch (_machine) - { - case Machine::EVM: - return assembleWithDeployed().first; - } - // unreachable - return MachineAssemblyObject(); + return assembleWithDeployed().first; } std::pair diff --git a/libyul/YulStack.h b/libyul/YulStack.h index 700fd2b3b..9424a2f01 100644 --- a/libyul/YulStack.h +++ b/libyul/YulStack.h @@ -67,7 +67,6 @@ class YulStack: public langutil::CharStreamProvider { public: enum class Language { Yul, Assembly, StrictAssembly }; - enum class Machine { EVM }; YulStack(): YulStack( @@ -106,7 +105,7 @@ public: void optimize(); /// Run the assembly step (should only be called after parseAndAnalyze). - MachineAssemblyObject assemble(Machine _machine) const; + MachineAssemblyObject assemble() const; /// Run the assembly step (should only be called after parseAndAnalyze). /// In addition to the value returned by @a assemble, returns diff --git a/solc/CommandLineInterface.cpp b/solc/CommandLineInterface.cpp index 0d0f4c5f9..5abd0237e 100644 --- a/solc/CommandLineInterface.cpp +++ b/solc/CommandLineInterface.cpp @@ -691,7 +691,7 @@ void CommandLineInterface::processInput() serveLSP(); break; case InputMode::Assembler: - assembleYul(m_options.assembly.inputLanguage, m_options.assembly.targetMachine); + assembleYul(m_options.assembly.inputLanguage); break; case InputMode::Linker: link(); @@ -1066,7 +1066,7 @@ string CommandLineInterface::objectWithLinkRefsHex(evmasm::LinkerObject const& _ return out; } -void CommandLineInterface::assembleYul(yul::YulStack::Language _language, yul::YulStack::Machine _targetMachine) +void CommandLineInterface::assembleYul(yul::YulStack::Language _language) { solAssert(m_options.input.mode == InputMode::Assembler); @@ -1115,7 +1115,6 @@ void CommandLineInterface::assembleYul(yul::YulStack::Language _language, yul::Y for (auto const& src: m_fileReader.sourceUnits()) { - solAssert(_targetMachine == yul::YulStack::Machine::EVM); string machine = "EVM"; sout() << endl << "======= " << src.first << " (" << machine << ") =======" << endl; @@ -1130,7 +1129,7 @@ void CommandLineInterface::assembleYul(yul::YulStack::Language _language, yul::Y } yul::MachineAssemblyObject object; - object = stack.assemble(_targetMachine); + object = stack.assemble(); object.bytecode->link(m_options.linker.libraries); if (m_options.compiler.outputs.binary) @@ -1141,12 +1140,12 @@ void CommandLineInterface::assembleYul(yul::YulStack::Language _language, yul::Y else serr() << "No binary representation found." << endl; } + if (m_options.compiler.outputs.astCompactJson) { sout() << "AST:" << endl << endl; sout() << util::jsonPrint(stack.astJson(), m_options.formatting.json) << endl; } - solAssert(_targetMachine == yul::YulStack::Machine::EVM, ""); if (m_options.compiler.outputs.asm_) { sout() << endl << "Text representation:" << endl; diff --git a/solc/CommandLineInterface.h b/solc/CommandLineInterface.h index 5de69270b..44c36839a 100644 --- a/solc/CommandLineInterface.h +++ b/solc/CommandLineInterface.h @@ -92,7 +92,7 @@ private: /// @returns the full object with library placeholder hints in hex. static std::string objectWithLinkRefsHex(evmasm::LinkerObject const& _obj); - void assembleYul(yul::YulStack::Language _language, yul::YulStack::Machine _targetMachine); + void assembleYul(yul::YulStack::Language _language); void outputCompilationResults(); diff --git a/solc/CommandLineParser.cpp b/solc/CommandLineParser.cpp index da818411e..ac102bcd7 100644 --- a/solc/CommandLineParser.cpp +++ b/solc/CommandLineParser.cpp @@ -61,7 +61,6 @@ 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"; @@ -110,12 +109,6 @@ 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 { @@ -234,7 +227,6 @@ bool CommandLineOptions::operator==(CommandLineOptions const& _other) const noex output.stopAfter == _other.output.stopAfter && output.eofVersion == _other.output.eofVersion && input.mode == _other.input.mode && - assembly.targetMachine == _other.assembly.targetMachine && assembly.inputLanguage == _other.assembly.inputLanguage && linker.libraries == _other.linker.libraries && formatting.json == _other.formatting.json && @@ -644,19 +636,19 @@ General Information)").c_str(), ( g_strAssemble.c_str(), ("Switch to assembly mode, ignoring all options except " - "--" + g_strMachine + ", --" + g_strYulDialect + ", --" + g_strOptimize + " and --" + g_strYulOptimizations + " " + "--" + g_strYulDialect + ", --" + g_strOptimize + " and --" + g_strYulOptimizations + " " "and assumes input is assembly.").c_str() ) ( g_strYul.c_str(), ("Switch to Yul mode, ignoring all options except " - "--" + g_strMachine + ", --" + g_strYulDialect + ", --" + g_strOptimize + " and --" + g_strYulOptimizations + " " + "--" + g_strYulDialect + ", --" + g_strOptimize + " and --" + g_strYulOptimizations + " " "and assumes input is Yul.").c_str() ) ( g_strStrictAssembly.c_str(), ("Switch to strict assembly mode, ignoring all options except " - "--" + g_strMachine + ", --" + g_strYulDialect + ", --" + g_strOptimize + " and --" + g_strYulOptimizations + " " + "--" + g_strYulDialect + ", --" + g_strOptimize + " and --" + g_strYulOptimizations + " " "and assumes input is strict assembly.").c_str() ) ( @@ -675,11 +667,6 @@ 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, ",")), @@ -1208,17 +1195,8 @@ void CommandLineParser::processArgs() // switch to assembly mode using Input = yul::YulStack::Language; - using Machine = yul::YulStack::Machine; 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) - m_options.assembly.targetMachine = Machine::EVM; - else - solThrow(CommandLineValidationError, "Invalid option for --" + g_strMachine + ": " + machine); - } if (m_args.count(g_strYulDialect)) { string dialect = m_args[g_strYulDialect].as(); @@ -1234,10 +1212,10 @@ void CommandLineParser::processArgs() ); return; } - else if (countEnabledOptions({g_strYulDialect, g_strMachine}) >= 1) + else if (countEnabledOptions({g_strYulDialect}) >= 1) solThrow( CommandLineValidationError, - "--" + g_strYulDialect + " and --" + g_strMachine + " are only valid in assembly mode." + "--" + g_strYulDialect + " is only valid in assembly mode." ); if (m_args.count(g_strMetadataHash)) diff --git a/solc/CommandLineParser.h b/solc/CommandLineParser.h index a4c5a7719..8fde1b97e 100644 --- a/solc/CommandLineParser.h +++ b/solc/CommandLineParser.h @@ -191,7 +191,6 @@ struct CommandLineOptions struct { - yul::YulStack::Machine targetMachine = yul::YulStack::Machine::EVM; yul::YulStack::Language inputLanguage = yul::YulStack::Language::StrictAssembly; } assembly; diff --git a/test/cmdlineTests/strict_asm_options_in_non_asm_mode/args b/test/cmdlineTests/strict_asm_options_in_non_asm_mode/args index 9efe91f61..063e678f1 100644 --- a/test/cmdlineTests/strict_asm_options_in_non_asm_mode/args +++ b/test/cmdlineTests/strict_asm_options_in_non_asm_mode/args @@ -1 +1 @@ ---yul-dialect evm --machine evm +--yul-dialect evm 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 6d67f2b5b..b6ede376a 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 and --machine are only valid in assembly mode. +--yul-dialect is only valid in assembly mode. diff --git a/test/libsolidity/InlineAssembly.cpp b/test/libsolidity/InlineAssembly.cpp index 4a8a9d617..52687370d 100644 --- a/test/libsolidity/InlineAssembly.cpp +++ b/test/libsolidity/InlineAssembly.cpp @@ -56,8 +56,7 @@ std::optional parseAndReturnFirstError( string const& _source, bool _assemble = false, bool _allowWarnings = true, - YulStack::Language _language = YulStack::Language::Assembly, - YulStack::Machine _machine = YulStack::Machine::EVM + YulStack::Language _language = YulStack::Language::Assembly ) { YulStack stack( @@ -72,7 +71,7 @@ std::optional parseAndReturnFirstError( { success = stack.parseAndAnalyze("", _source); if (success && _assemble) - stack.assemble(_machine); + stack.assemble(); } catch (FatalError const&) { @@ -104,17 +103,15 @@ bool successParse( string const& _source, bool _assemble = false, bool _allowWarnings = true, - YulStack::Language _language = YulStack::Language::Assembly, - YulStack::Machine _machine = YulStack::Machine::EVM + YulStack::Language _language = YulStack::Language::Assembly ) { - return !parseAndReturnFirstError(_source, _assemble, _allowWarnings, _language, _machine); + return !parseAndReturnFirstError(_source, _assemble, _allowWarnings, _language); } bool successAssemble(string const& _source, bool _allowWarnings = true, YulStack::Language _language = YulStack::Language::Assembly) { - return - successParse(_source, true, _allowWarnings, _language, YulStack::Machine::EVM); + return successParse(_source, true, _allowWarnings, _language); } Error expectError( @@ -124,7 +121,6 @@ Error expectError( YulStack::Language _language = YulStack::Language::Assembly ) { - auto error = parseAndReturnFirstError(_source, _assemble, _allowWarnings, _language); BOOST_REQUIRE(error); return *error; diff --git a/test/libsolidity/SolidityExecutionFramework.cpp b/test/libsolidity/SolidityExecutionFramework.cpp index 7d18e1bb4..fadef7a3b 100644 --- a/test/libsolidity/SolidityExecutionFramework.cpp +++ b/test/libsolidity/SolidityExecutionFramework.cpp @@ -109,7 +109,7 @@ bytes SolidityExecutionFramework::multiSourceCompileContract( try { asmStack.optimize(); - obj = std::move(*asmStack.assemble(yul::YulStack::Machine::EVM).bytecode); + obj = std::move(*asmStack.assemble().bytecode); obj.link(_libraryAddresses); break; } diff --git a/test/libyul/ObjectCompilerTest.cpp b/test/libyul/ObjectCompilerTest.cpp index 74a680b9b..3ff2e0858 100644 --- a/test/libyul/ObjectCompilerTest.cpp +++ b/test/libyul/ObjectCompilerTest.cpp @@ -80,7 +80,7 @@ TestCase::TestResult ObjectCompilerTest::run(ostream& _stream, string const& _li } stack.optimize(); - MachineAssemblyObject obj = stack.assemble(YulStack::Machine::EVM); + MachineAssemblyObject obj = stack.assemble(); solAssert(obj.bytecode, ""); solAssert(obj.sourceMappings, ""); diff --git a/test/solc/CommandLineParser.cpp b/test/solc/CommandLineParser.cpp index 1b5d8da49..2902be1bd 100644 --- a/test/solc/CommandLineParser.cpp +++ b/test/solc/CommandLineParser.cpp @@ -247,19 +247,16 @@ BOOST_AUTO_TEST_CASE(via_ir_options) BOOST_AUTO_TEST_CASE(assembly_mode_options) { - static vector, YulStack::Machine, YulStack::Language>> const allowedCombinations = { - {{"--machine=evm", "--yul-dialect=evm", "--assemble"}, YulStack::Machine::EVM, YulStack::Language::StrictAssembly}, - {{"--machine=evm", "--yul-dialect=evm", "--yul"}, YulStack::Machine::EVM, YulStack::Language::StrictAssembly}, - {{"--machine=evm", "--yul-dialect=evm", "--strict-assembly"}, YulStack::Machine::EVM, YulStack::Language::StrictAssembly}, - {{"--machine=evm", "--assemble"}, YulStack::Machine::EVM, YulStack::Language::Assembly}, - {{"--machine=evm", "--yul"}, YulStack::Machine::EVM, YulStack::Language::Yul}, - {{"--machine=evm", "--strict-assembly"}, YulStack::Machine::EVM, YulStack::Language::StrictAssembly}, - {{"--assemble"}, YulStack::Machine::EVM, YulStack::Language::Assembly}, - {{"--yul"}, YulStack::Machine::EVM, YulStack::Language::Yul}, - {{"--strict-assembly"}, YulStack::Machine::EVM, YulStack::Language::StrictAssembly}, + static vector, YulStack::Language>> const allowedCombinations = { + {{"--yul-dialect=evm", "--assemble"}, YulStack::Language::StrictAssembly}, + {{"--yul-dialect=evm", "--yul"}, YulStack::Language::StrictAssembly}, + {{"--yul-dialect=evm", "--strict-assembly"}, YulStack::Language::StrictAssembly}, + {{"--assemble"}, YulStack::Language::Assembly}, + {{"--yul"}, YulStack::Language::Yul}, + {{"--strict-assembly"}, YulStack::Language::StrictAssembly}, }; - for (auto const& [assemblyOptions, expectedMachine, expectedLanguage]: allowedCombinations) + for (auto const& [assemblyOptions, expectedLanguage]: allowedCombinations) { vector commandLine = { "solc", @@ -320,7 +317,6 @@ BOOST_AUTO_TEST_CASE(assembly_mode_options) expectedOptions.output.revertStrings = RevertStrings::Strip; expectedOptions.output.debugInfoSelection = DebugInfoSelection::fromString("location"); expectedOptions.formatting.json = JsonFormat {JsonFormat::Pretty, 1}; - expectedOptions.assembly.targetMachine = expectedMachine; expectedOptions.assembly.inputLanguage = expectedLanguage; expectedOptions.linker.libraries = { {"dir1/file1.sol:L", h160("1234567890123456789012345678901234567890")}, diff --git a/test/tools/ossfuzz/strictasm_assembly_ossfuzz.cpp b/test/tools/ossfuzz/strictasm_assembly_ossfuzz.cpp index c7ffd3d41..c6baba46a 100644 --- a/test/tools/ossfuzz/strictasm_assembly_ossfuzz.cpp +++ b/test/tools/ossfuzz/strictasm_assembly_ossfuzz.cpp @@ -50,7 +50,7 @@ extern "C" int LLVMFuzzerTestOneInput(uint8_t const* _data, size_t _size) try { - MachineAssemblyObject obj = stack.assemble(YulStack::Machine::EVM); + MachineAssemblyObject obj = stack.assemble(); solAssert(obj.bytecode, ""); } catch (StackTooDeepError const&)