Fix visitation order bug for structural simplifier.

This commit is contained in:
chriseth
2019-03-06 19:34:07 +01:00
parent 281c04cb10
commit 21115f8050
4 changed files with 24 additions and 7 deletions
+8 -5
View File
@@ -104,10 +104,12 @@ OptionalStatements reduceSingleCaseSwitch(Switch& _switchStmt)
s->emplace_back(If{
std::move(_switchStmt.location),
make_unique<Expression>(FunctionalInstruction{
std::move(loc),
solidity::Instruction::EQ,
{std::move(*switchCase.value), std::move(*_switchStmt.expression)}
}), std::move(switchCase.body)});
std::move(loc),
solidity::Instruction::EQ,
{std::move(*switchCase.value), std::move(*_switchStmt.expression)}
}),
std::move(switchCase.body)
});
return s;
}
else
@@ -202,10 +204,11 @@ void StructuralSimplifier::simplify(std::vector<yul::Statement>& _statements)
_statements,
[&](Statement& _stmt) -> OptionalStatements
{
visit(_stmt);
OptionalStatements result = boost::apply_visitor(visitor, _stmt);
if (result)
simplify(*result);
else
visit(_stmt);
return result;
}
);