mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Remove YulStack::Machine enum.
This commit is contained in:
parent
14d2ae2dfa
commit
206a2c183f
@ -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<MachineAssemblyObject, MachineAssemblyObject>
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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();
|
||||
|
||||
|
@ -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<string> const g_machineArgs
|
||||
{
|
||||
g_strEVM
|
||||
};
|
||||
|
||||
/// Possible arguments to for --yul-dialect
|
||||
static set<string> 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<string>()->value_name(util::joinHumanReadable(g_machineArgs, ",")),
|
||||
"Target machine in assembly or Yul mode."
|
||||
)
|
||||
(
|
||||
g_strYulDialect.c_str(),
|
||||
po::value<string>()->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<string>();
|
||||
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<string>();
|
||||
@ -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))
|
||||
|
@ -191,7 +191,6 @@ struct CommandLineOptions
|
||||
|
||||
struct
|
||||
{
|
||||
yul::YulStack::Machine targetMachine = yul::YulStack::Machine::EVM;
|
||||
yul::YulStack::Language inputLanguage = yul::YulStack::Language::StrictAssembly;
|
||||
} assembly;
|
||||
|
||||
|
@ -1 +1 @@
|
||||
--yul-dialect evm --machine evm
|
||||
--yul-dialect evm
|
||||
|
@ -1 +1 @@
|
||||
--yul-dialect and --machine are only valid in assembly mode.
|
||||
--yul-dialect is only valid in assembly mode.
|
||||
|
@ -56,8 +56,7 @@ std::optional<Error> 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<Error> 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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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, "");
|
||||
|
||||
|
@ -247,19 +247,16 @@ BOOST_AUTO_TEST_CASE(via_ir_options)
|
||||
|
||||
BOOST_AUTO_TEST_CASE(assembly_mode_options)
|
||||
{
|
||||
static vector<tuple<vector<string>, 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<tuple<vector<string>, 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<string> 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")},
|
||||
|
@ -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&)
|
||||
|
Loading…
Reference in New Issue
Block a user