Control flow side-effects for user-defined functions.

This commit is contained in:
chriseth
2021-10-14 17:46:07 +02:00
parent d443fe415d
commit 9417d6775f
20 changed files with 637 additions and 32 deletions
+14 -2
View File
@@ -57,8 +57,20 @@ pair<YulString, BuiltinFunctionForEVM> createEVMFunction(
f.parameters.resize(static_cast<size_t>(info.args));
f.returns.resize(static_cast<size_t>(info.ret));
f.sideEffects = EVMDialect::sideEffectsOfInstruction(_instruction);
f.controlFlowSideEffects.terminates = evmasm::SemanticInformation::terminatesControlFlow(_instruction);
f.controlFlowSideEffects.reverts = evmasm::SemanticInformation::reverts(_instruction);
if (evmasm::SemanticInformation::terminatesControlFlow(_instruction))
{
f.controlFlowSideEffects.canContinue = false;
if (evmasm::SemanticInformation::reverts(_instruction))
{
f.controlFlowSideEffects.canTerminate = false;
f.controlFlowSideEffects.canRevert = true;
}
else
{
f.controlFlowSideEffects.canTerminate = true;
f.controlFlowSideEffects.canRevert = false;
}
}
f.isMSize = _instruction == evmasm::Instruction::MSIZE;
f.literalArguments.clear();
f.instruction = _instruction;