Merge pull request #4398 from rnaby/libevmasm/KnownState-125

As SWITCH..CASE is better than ELSE..IF
This commit is contained in:
chriseth 2018-07-02 13:00:59 +02:00 committed by GitHub
commit 8a4980c05e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -121,28 +121,33 @@ KnownState::StoreOperation KnownState::feedItem(AssemblyItem const& _item, bool
vector<Id> arguments(info.args);
for (int i = 0; i < info.args; ++i)
arguments[i] = stackElement(m_stackHeight - i, _item.location());
if (_item.instruction() == Instruction::SSTORE)
switch (_item.instruction())
{
case Instruction::SSTORE:
op = storeInStorage(arguments[0], arguments[1], _item.location());
else if (_item.instruction() == Instruction::SLOAD)
break;
case Instruction::SLOAD:
setStackElement(
m_stackHeight + _item.deposit(),
loadFromStorage(arguments[0], _item.location())
);
else if (_item.instruction() == Instruction::MSTORE)
break;
case Instruction::MSTORE:
op = storeInMemory(arguments[0], arguments[1], _item.location());
else if (_item.instruction() == Instruction::MLOAD)
break;
case Instruction::MLOAD:
setStackElement(
m_stackHeight + _item.deposit(),
loadFromMemory(arguments[0], _item.location())
);
else if (_item.instruction() == Instruction::KECCAK256)
break;
case Instruction::KECCAK256:
setStackElement(
m_stackHeight + _item.deposit(),
applyKeccak256(arguments.at(0), arguments.at(1), _item.location())
);
else
{
break;
default:
bool invMem = SemanticInformation::invalidatesMemory(_item.instruction());
bool invStor = SemanticInformation::invalidatesStorage(_item.instruction());
// We could be a bit more fine-grained here (CALL only invalidates part of