mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #1634 from ethereum/swap-assert
Warn early in a case of invalid swap
This commit is contained in:
commit
4220f01688
@ -202,28 +202,28 @@ inline unsigned getSwapNumber(Instruction _inst)
|
|||||||
/// @returns the PUSH<_number> instruction
|
/// @returns the PUSH<_number> instruction
|
||||||
inline Instruction pushInstruction(unsigned _number)
|
inline Instruction pushInstruction(unsigned _number)
|
||||||
{
|
{
|
||||||
assertThrow(1 <= _number && _number <= 32, InvalidOpcode, "Invalid PUSH instruction requested.");
|
assertThrow(1 <= _number && _number <= 32, InvalidOpcode, std::string("Invalid PUSH instruction requested (") + std::to_string(_number) + ").");
|
||||||
return Instruction(unsigned(Instruction::PUSH1) + _number - 1);
|
return Instruction(unsigned(Instruction::PUSH1) + _number - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @returns the DUP<_number> instruction
|
/// @returns the DUP<_number> instruction
|
||||||
inline Instruction dupInstruction(unsigned _number)
|
inline Instruction dupInstruction(unsigned _number)
|
||||||
{
|
{
|
||||||
assertThrow(1 <= _number && _number <= 16, InvalidOpcode, "Invalid DUP instruction requested.");
|
assertThrow(1 <= _number && _number <= 16, InvalidOpcode, std::string("Invalid DUP instruction requested (") + std::to_string(_number) + ").");
|
||||||
return Instruction(unsigned(Instruction::DUP1) + _number - 1);
|
return Instruction(unsigned(Instruction::DUP1) + _number - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @returns the SWAP<_number> instruction
|
/// @returns the SWAP<_number> instruction
|
||||||
inline Instruction swapInstruction(unsigned _number)
|
inline Instruction swapInstruction(unsigned _number)
|
||||||
{
|
{
|
||||||
assertThrow(1 <= _number && _number <= 16, InvalidOpcode, "Invalid SWAP instruction requested.");
|
assertThrow(1 <= _number && _number <= 16, InvalidOpcode, std::string("Invalid SWAP instruction requested (") + std::to_string(_number) + ").");
|
||||||
return Instruction(unsigned(Instruction::SWAP1) + _number - 1);
|
return Instruction(unsigned(Instruction::SWAP1) + _number - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @returns the LOG<_number> instruction
|
/// @returns the LOG<_number> instruction
|
||||||
inline Instruction logInstruction(unsigned _number)
|
inline Instruction logInstruction(unsigned _number)
|
||||||
{
|
{
|
||||||
assertThrow(_number <= 4, InvalidOpcode, "Invalid LOG instruction requested.");
|
assertThrow(_number <= 4, InvalidOpcode, std::string("Invalid LOG instruction requested (") + std::to_string(_number) + ").");
|
||||||
return Instruction(unsigned(Instruction::LOG0) + _number);
|
return Instruction(unsigned(Instruction::LOG0) + _number);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -200,6 +200,7 @@ void CompilerUtils::encodeToMemory(
|
|||||||
// leave end_of_mem as dyn head pointer
|
// leave end_of_mem as dyn head pointer
|
||||||
m_context << Instruction::DUP1 << u256(32) << Instruction::ADD;
|
m_context << Instruction::DUP1 << u256(32) << Instruction::ADD;
|
||||||
dynPointers++;
|
dynPointers++;
|
||||||
|
solAssert((argSize + dynPointers) < 16, "Stack too deep, try using less variables.");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user