Make dialect const& and allocate single instances statically.

This commit is contained in:
chriseth
2019-05-17 12:54:24 +02:00
parent 570db164c9
commit 4bdb981224
28 changed files with 190 additions and 184 deletions
+20 -8
View File
@@ -138,22 +138,34 @@ BuiltinFunctionForEVM const* EVMDialect::builtin(YulString _name) const
return nullptr;
}
shared_ptr<EVMDialect const> EVMDialect::looseAssemblyForEVM(langutil::EVMVersion _version)
EVMDialect const& EVMDialect::looseAssemblyForEVM(langutil::EVMVersion _version)
{
return make_shared<EVMDialect>(AsmFlavour::Loose, false, _version);
static map<langutil::EVMVersion, unique_ptr<EVMDialect const>> dialects;
if (!dialects[_version])
dialects[_version] = make_unique<EVMDialect>(AsmFlavour::Loose, false, _version);
return *dialects[_version];
}
shared_ptr<EVMDialect const> EVMDialect::strictAssemblyForEVM(langutil::EVMVersion _version)
EVMDialect const& EVMDialect::strictAssemblyForEVM(langutil::EVMVersion _version)
{
return make_shared<EVMDialect>(AsmFlavour::Strict, false, _version);
static map<langutil::EVMVersion, unique_ptr<EVMDialect const>> dialects;
if (!dialects[_version])
dialects[_version] = make_unique<EVMDialect>(AsmFlavour::Strict, false, _version);
return *dialects[_version];
}
shared_ptr<EVMDialect const> EVMDialect::strictAssemblyForEVMObjects(langutil::EVMVersion _version)
EVMDialect const& EVMDialect::strictAssemblyForEVMObjects(langutil::EVMVersion _version)
{
return make_shared<EVMDialect>(AsmFlavour::Strict, true, _version);
static map<langutil::EVMVersion, unique_ptr<EVMDialect const>> dialects;
if (!dialects[_version])
dialects[_version] = make_unique<EVMDialect>(AsmFlavour::Strict, true, _version);
return *dialects[_version];
}
shared_ptr<EVMDialect const> EVMDialect::yulForEVM(langutil::EVMVersion _version)
EVMDialect const& EVMDialect::yulForEVM(langutil::EVMVersion _version)
{
return make_shared<EVMDialect>(AsmFlavour::Yul, false, _version);
static map<langutil::EVMVersion, unique_ptr<EVMDialect const>> dialects;
if (!dialects[_version])
dialects[_version] = make_unique<EVMDialect>(AsmFlavour::Yul, false, _version);
return *dialects[_version];
}