aboutsummaryrefslogtreecommitdiffstats
path: root/libyul/optimiser/ForLoopInitRewriter.cpp
diff options
context:
space:
mode:
authorchriseth <chris@ethereum.org>2018-12-04 21:10:22 +0800
committerGitHub <noreply@github.com>2018-12-04 21:10:22 +0800
commit4e5dabf832ddefc30035e67ad450a12f17c8345a (patch)
tree7ac0b31a18d1566976e751a6c1f9354013d90db4 /libyul/optimiser/ForLoopInitRewriter.cpp
parente49f37be7f64d0306c2e63cea81eb98aa1bc85f1 (diff)
parent1b8a013d4a24f9f92b7c205a0ac2d9c8c049ee7f (diff)
downloaddexon-solidity-4e5dabf832ddefc30035e67ad450a12f17c8345a.tar
dexon-solidity-4e5dabf832ddefc30035e67ad450a12f17c8345a.tar.gz
dexon-solidity-4e5dabf832ddefc30035e67ad450a12f17c8345a.tar.bz2
dexon-solidity-4e5dabf832ddefc30035e67ad450a12f17c8345a.tar.lz
dexon-solidity-4e5dabf832ddefc30035e67ad450a12f17c8345a.tar.xz
dexon-solidity-4e5dabf832ddefc30035e67ad450a12f17c8345a.tar.zst
dexon-solidity-4e5dabf832ddefc30035e67ad450a12f17c8345a.zip
Merge pull request #5585 from ethereum/forInitRewriteNested
[Yul] Proper recursion in ForLoopInitRewriter.
Diffstat (limited to 'libyul/optimiser/ForLoopInitRewriter.cpp')
-rw-r--r--libyul/optimiser/ForLoopInitRewriter.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/libyul/optimiser/ForLoopInitRewriter.cpp b/libyul/optimiser/ForLoopInitRewriter.cpp
index 80d39248..36d5db68 100644
--- a/libyul/optimiser/ForLoopInitRewriter.cpp
+++ b/libyul/optimiser/ForLoopInitRewriter.cpp
@@ -27,17 +27,24 @@ void ForLoopInitRewriter::operator()(Block& _block)
{
iterateReplacing(
_block.statements,
- [](Statement& _stmt) -> boost::optional<vector<Statement>>
+ [&](Statement& _stmt) -> boost::optional<vector<Statement>>
{
if (_stmt.type() == typeid(ForLoop))
{
auto& forLoop = boost::get<ForLoop>(_stmt);
+ (*this)(forLoop.pre);
+ (*this)(forLoop.body);
+ (*this)(forLoop.post);
vector<Statement> rewrite;
swap(rewrite, forLoop.pre.statements);
rewrite.emplace_back(move(forLoop));
return rewrite;
}
- return {};
+ else
+ {
+ visit(_stmt);
+ return {};
+ }
}
);
}