Allow basefee as Yul identifier for EVMVersion < london

This was done to prevent basefee from being a breaking change. This change will be removed in 0.9.0.

TODO revert this commit in breaking.
This commit is contained in:
hrkrshnn
2021-08-11 10:46:08 +02:00
parent 79733fca48
commit 7f1a2be0fe
3 changed files with 14 additions and 11 deletions
+11 -3
View File
@@ -112,14 +112,22 @@ pair<YulString, BuiltinFunctionForEVM> createFunction(
return {name, f};
}
set<YulString> createReservedIdentifiers()
set<YulString> createReservedIdentifiers(langutil::EVMVersion _evmVersion)
{
// TODO remove this in 0.9.0. We allow creating functions or identifiers in Yul with the name
// basefee for VMs before london.
auto baseFeeException = [&](evmasm::Instruction _instr) -> bool
{
return _instr == evmasm::Instruction::BASEFEE && _evmVersion < langutil::EVMVersion::london();
};
set<YulString> reserved;
for (auto const& instr: evmasm::c_instructions)
{
string name = instr.first;
transform(name.begin(), name.end(), name.begin(), [](unsigned char _c) { return tolower(_c); });
reserved.emplace(name);
if (!baseFeeException(instr.second))
reserved.emplace(name);
}
reserved += vector<YulString>{
"linkersymbol"_yulstring,
@@ -300,7 +308,7 @@ EVMDialect::EVMDialect(langutil::EVMVersion _evmVersion, bool _objectAccess):
m_objectAccess(_objectAccess),
m_evmVersion(_evmVersion),
m_functions(createBuiltins(_evmVersion, _objectAccess)),
m_reserved(createReservedIdentifiers())
m_reserved(createReservedIdentifiers(_evmVersion))
{
}