Prevent instructions to be generated as names.

This commit is contained in:
chriseth
2019-04-24 14:35:21 +02:00
parent eac0048176
commit 0af8d758a5
6 changed files with 56 additions and 25 deletions
+21 -21
View File
@@ -53,6 +53,27 @@ shared_ptr<Block> Parser::parse(std::shared_ptr<Scanner> const& _scanner, bool _
return nullptr;
}
std::map<string, dev::eth::Instruction> const& Parser::instructions()
{
// Allowed instructions, lowercase names.
static map<string, dev::eth::Instruction> s_instructions;
if (s_instructions.empty())
{
for (auto const& instruction: dev::eth::c_instructions)
{
if (
instruction.second == dev::eth::Instruction::JUMPDEST ||
dev::eth::isPushInstruction(instruction.second)
)
continue;
string name = instruction.first;
transform(name.begin(), name.end(), name.begin(), [](unsigned char _c) { return tolower(_c); });
s_instructions[name] = instruction.second;
}
}
return s_instructions;
}
Block Parser::parseBlock()
{
RecursionGuard recursionGuard(*this);
@@ -340,27 +361,6 @@ Expression Parser::parseExpression()
}
}
std::map<string, dev::eth::Instruction> const& Parser::instructions()
{
// Allowed instructions, lowercase names.
static map<string, dev::eth::Instruction> s_instructions;
if (s_instructions.empty())
{
for (auto const& instruction: dev::eth::c_instructions)
{
if (
instruction.second == dev::eth::Instruction::JUMPDEST ||
dev::eth::isPushInstruction(instruction.second)
)
continue;
string name = instruction.first;
transform(name.begin(), name.end(), name.begin(), [](unsigned char _c) { return tolower(_c); });
s_instructions[name] = instruction.second;
}
}
return s_instructions;
}
std::map<dev::eth::Instruction, string> const& Parser::instructionNames()
{
static map<dev::eth::Instruction, string> s_instructionNames;