mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Reset Yul string repository before each compilation.
This commit is contained in:
committed by
chriseth
parent
b95eebee1c
commit
dbae0fa939
@@ -182,6 +182,7 @@ BuiltinFunctionForEVM const* EVMDialect::builtin(YulString _name) const
|
||||
EVMDialect const& EVMDialect::looseAssemblyForEVM(langutil::EVMVersion _version)
|
||||
{
|
||||
static map<langutil::EVMVersion, unique_ptr<EVMDialect const>> dialects;
|
||||
static YulStringRepository::ResetCallback callback{[&] { dialects.clear(); }};
|
||||
if (!dialects[_version])
|
||||
dialects[_version] = make_unique<EVMDialect>(AsmFlavour::Loose, false, _version);
|
||||
return *dialects[_version];
|
||||
@@ -190,6 +191,7 @@ EVMDialect const& EVMDialect::looseAssemblyForEVM(langutil::EVMVersion _version)
|
||||
EVMDialect const& EVMDialect::strictAssemblyForEVM(langutil::EVMVersion _version)
|
||||
{
|
||||
static map<langutil::EVMVersion, unique_ptr<EVMDialect const>> dialects;
|
||||
static YulStringRepository::ResetCallback callback{[&] { dialects.clear(); }};
|
||||
if (!dialects[_version])
|
||||
dialects[_version] = make_unique<EVMDialect>(AsmFlavour::Strict, false, _version);
|
||||
return *dialects[_version];
|
||||
@@ -198,6 +200,7 @@ EVMDialect const& EVMDialect::strictAssemblyForEVM(langutil::EVMVersion _version
|
||||
EVMDialect const& EVMDialect::strictAssemblyForEVMObjects(langutil::EVMVersion _version)
|
||||
{
|
||||
static map<langutil::EVMVersion, unique_ptr<EVMDialect const>> dialects;
|
||||
static YulStringRepository::ResetCallback callback{[&] { dialects.clear(); }};
|
||||
if (!dialects[_version])
|
||||
dialects[_version] = make_unique<EVMDialect>(AsmFlavour::Strict, true, _version);
|
||||
return *dialects[_version];
|
||||
@@ -206,6 +209,7 @@ EVMDialect const& EVMDialect::strictAssemblyForEVMObjects(langutil::EVMVersion _
|
||||
EVMDialect const& EVMDialect::yulForEVM(langutil::EVMVersion _version)
|
||||
{
|
||||
static map<langutil::EVMVersion, unique_ptr<EVMDialect const>> dialects;
|
||||
static YulStringRepository::ResetCallback callback{[&] { dialects.clear(); }};
|
||||
if (!dialects[_version])
|
||||
dialects[_version] = make_unique<EVMDialect>(AsmFlavour::Yul, false, _version);
|
||||
return *dialects[_version];
|
||||
|
||||
@@ -63,6 +63,15 @@ BuiltinFunction const* WasmDialect::builtin(YulString _name) const
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
WasmDialect const& WasmDialect::instance()
|
||||
{
|
||||
static std::unique_ptr<WasmDialect> dialect;
|
||||
static YulStringRepository::ResetCallback callback{[&] { dialect.reset(); }};
|
||||
if (!dialect)
|
||||
dialect = make_unique<WasmDialect>();
|
||||
return *dialect;
|
||||
}
|
||||
|
||||
void WasmDialect::addFunction(string _name, size_t _params, size_t _returns)
|
||||
{
|
||||
YulString name{move(_name)};
|
||||
|
||||
@@ -42,17 +42,13 @@ struct Object;
|
||||
*/
|
||||
struct WasmDialect: public Dialect
|
||||
{
|
||||
BuiltinFunction const* builtin(YulString _name) const override;
|
||||
|
||||
static WasmDialect const& instance()
|
||||
{
|
||||
static WasmDialect dialect;
|
||||
return dialect;
|
||||
}
|
||||
|
||||
protected:
|
||||
WasmDialect();
|
||||
|
||||
BuiltinFunction const* builtin(YulString _name) const override;
|
||||
|
||||
static WasmDialect const& instance();
|
||||
|
||||
private:
|
||||
void addFunction(std::string _name, size_t _params, size_t _returns);
|
||||
|
||||
std::map<YulString, BuiltinFunction> m_functions;
|
||||
|
||||
Reference in New Issue
Block a user