mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Allow EVM to EWasm translation in assembly mode.
This commit is contained in:
parent
912a0e2e4d
commit
f7d7c97b8f
@ -122,6 +122,7 @@ static string const g_strHelp = "help";
|
|||||||
static string const g_strInputFile = "input-file";
|
static string const g_strInputFile = "input-file";
|
||||||
static string const g_strInterface = "interface";
|
static string const g_strInterface = "interface";
|
||||||
static string const g_strYul = "yul";
|
static string const g_strYul = "yul";
|
||||||
|
static string const g_strYulDialect = "yul-dialect";
|
||||||
static string const g_strIR = "ir";
|
static string const g_strIR = "ir";
|
||||||
static string const g_strEWasm = "ewasm";
|
static string const g_strEWasm = "ewasm";
|
||||||
static string const g_strLicense = "license";
|
static string const g_strLicense = "license";
|
||||||
@ -220,6 +221,13 @@ static set<string> const g_machineArgs
|
|||||||
g_streWasm
|
g_streWasm
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/// Possible arguments to for --yul-dialect
|
||||||
|
static set<string> const g_yulDialectArgs
|
||||||
|
{
|
||||||
|
g_strEVM,
|
||||||
|
g_streWasm
|
||||||
|
};
|
||||||
|
|
||||||
static void version()
|
static void version()
|
||||||
{
|
{
|
||||||
sout() <<
|
sout() <<
|
||||||
@ -685,15 +693,20 @@ Allowed options)",
|
|||||||
)
|
)
|
||||||
(
|
(
|
||||||
g_argAssemble.c_str(),
|
g_argAssemble.c_str(),
|
||||||
"Switch to assembly mode, ignoring all options except --machine and --optimize and assumes input is assembly."
|
"Switch to assembly mode, ignoring all options except --machine, --yul-dialect and --optimize and assumes input is assembly."
|
||||||
)
|
)
|
||||||
(
|
(
|
||||||
g_argYul.c_str(),
|
g_argYul.c_str(),
|
||||||
"Switch to Yul mode, ignoring all options except --machine and --optimize and assumes input is Yul."
|
"Switch to Yul mode, ignoring all options except --machine, --yul-dialect and --optimize and assumes input is Yul."
|
||||||
)
|
)
|
||||||
(
|
(
|
||||||
g_argStrictAssembly.c_str(),
|
g_argStrictAssembly.c_str(),
|
||||||
"Switch to strict assembly mode, ignoring all options except --machine and --optimize and assumes input is strict assembly."
|
"Switch to strict assembly mode, ignoring all options except --machine, --yul-dialect and --optimize and assumes input is strict assembly."
|
||||||
|
)
|
||||||
|
(
|
||||||
|
g_strYulDialect.c_str(),
|
||||||
|
po::value<string>()->value_name(boost::join(g_yulDialectArgs, ",")),
|
||||||
|
"Input dialect to use in assembly or yul mode."
|
||||||
)
|
)
|
||||||
(
|
(
|
||||||
g_argMachine.c_str(),
|
g_argMachine.c_str(),
|
||||||
@ -911,6 +924,26 @@ bool CommandLineInterface::processInput()
|
|||||||
}
|
}
|
||||||
if (targetMachine == Machine::eWasm && inputLanguage == Input::StrictAssembly)
|
if (targetMachine == Machine::eWasm && inputLanguage == Input::StrictAssembly)
|
||||||
inputLanguage = Input::EWasm;
|
inputLanguage = Input::EWasm;
|
||||||
|
if (m_args.count(g_strYulDialect))
|
||||||
|
{
|
||||||
|
string dialect = m_args[g_strYulDialect].as<string>();
|
||||||
|
if (dialect == g_strEVM)
|
||||||
|
inputLanguage = Input::StrictAssembly;
|
||||||
|
else if (dialect == g_streWasm)
|
||||||
|
{
|
||||||
|
inputLanguage = Input::EWasm;
|
||||||
|
if (targetMachine != Machine::eWasm)
|
||||||
|
{
|
||||||
|
serr() << "If you select eWasm as --yul-dialect, --machine has to be eWasm as well." << endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
serr() << "Invalid option for --yul-dialect: " << dialect << endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (optimize && inputLanguage != Input::StrictAssembly)
|
if (optimize && inputLanguage != Input::StrictAssembly)
|
||||||
{
|
{
|
||||||
serr() <<
|
serr() <<
|
||||||
@ -1351,6 +1384,9 @@ bool CommandLineInterface::assemble(
|
|||||||
|
|
||||||
for (auto const& src: m_sourceCodes)
|
for (auto const& src: m_sourceCodes)
|
||||||
{
|
{
|
||||||
|
// TODO translate from EVM to eWasm if
|
||||||
|
// _language is EVM and _targetMachine is EWasm
|
||||||
|
|
||||||
string machine =
|
string machine =
|
||||||
_targetMachine == yul::AssemblyStack::Machine::EVM ? "EVM" :
|
_targetMachine == yul::AssemblyStack::Machine::EVM ? "EVM" :
|
||||||
_targetMachine == yul::AssemblyStack::Machine::EVM15 ? "EVM 1.5" :
|
_targetMachine == yul::AssemblyStack::Machine::EVM15 ? "EVM 1.5" :
|
||||||
|
Loading…
Reference in New Issue
Block a user