mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Add helpers for isPush/isDup/isSwap
This commit is contained in:
parent
ba7c5d2305
commit
8a32d7c3d7
@ -197,6 +197,24 @@ enum class Instruction: uint8_t
|
||||
SELFDESTRUCT = 0xff ///< halt execution and register account for later deletion
|
||||
};
|
||||
|
||||
/// @returns true if the instruction is a PUSH
|
||||
inline bool isPushInstruction(Instruction _inst)
|
||||
{
|
||||
return Instruction::PUSH1 <= _inst && _inst <= Instruction::PUSH32;
|
||||
}
|
||||
|
||||
/// @returns true if the instruction is a DUP
|
||||
inline bool isDupInstruction(Instruction _inst)
|
||||
{
|
||||
return Instruction::DUP1 <= _inst && _inst <= Instruction::DUP16;
|
||||
}
|
||||
|
||||
/// @returns true if the instruction is a SWAP
|
||||
inline bool isSwapInstruction(Instruction _inst)
|
||||
{
|
||||
return Instruction::SWAP1 <= _inst && _inst <= Instruction::SWAP16;
|
||||
}
|
||||
|
||||
/// @returns the number of PUSH Instruction _inst
|
||||
inline unsigned getPushNumber(Instruction _inst)
|
||||
{
|
||||
|
@ -256,7 +256,7 @@ std::map<string, dev::solidity::Instruction> const& Parser::instructions()
|
||||
{
|
||||
if (
|
||||
instruction.second == solidity::Instruction::JUMPDEST ||
|
||||
(solidity::Instruction::PUSH1 <= instruction.second && instruction.second <= solidity::Instruction::PUSH32)
|
||||
solidity::isPushInstruction(instruction.second)
|
||||
)
|
||||
continue;
|
||||
string name = instruction.first;
|
||||
@ -443,9 +443,9 @@ assembly::Statement Parser::parseCall(assembly::Statement&& _instruction)
|
||||
ret.location = ret.instruction.location;
|
||||
solidity::Instruction instr = ret.instruction.instruction;
|
||||
InstructionInfo instrInfo = instructionInfo(instr);
|
||||
if (solidity::Instruction::DUP1 <= instr && instr <= solidity::Instruction::DUP16)
|
||||
if (solidity::isDupInstruction(instr))
|
||||
fatalParserError("DUPi instructions not allowed for functional notation");
|
||||
if (solidity::Instruction::SWAP1 <= instr && instr <= solidity::Instruction::SWAP16)
|
||||
if (solidity::isSwapInstruction(instr))
|
||||
fatalParserError("SWAPi instructions not allowed for functional notation");
|
||||
expectToken(Token::LParen);
|
||||
unsigned args = unsigned(instrInfo.args);
|
||||
|
Loading…
Reference in New Issue
Block a user