mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Properly recurse in ForLoopInitRewriter
This commit is contained in:
parent
e49f37be7f
commit
1b8a013d4a
@ -27,17 +27,24 @@ void ForLoopInitRewriter::operator()(Block& _block)
|
|||||||
{
|
{
|
||||||
iterateReplacing(
|
iterateReplacing(
|
||||||
_block.statements,
|
_block.statements,
|
||||||
[](Statement& _stmt) -> boost::optional<vector<Statement>>
|
[&](Statement& _stmt) -> boost::optional<vector<Statement>>
|
||||||
{
|
{
|
||||||
if (_stmt.type() == typeid(ForLoop))
|
if (_stmt.type() == typeid(ForLoop))
|
||||||
{
|
{
|
||||||
auto& forLoop = boost::get<ForLoop>(_stmt);
|
auto& forLoop = boost::get<ForLoop>(_stmt);
|
||||||
|
(*this)(forLoop.pre);
|
||||||
|
(*this)(forLoop.body);
|
||||||
|
(*this)(forLoop.post);
|
||||||
vector<Statement> rewrite;
|
vector<Statement> rewrite;
|
||||||
swap(rewrite, forLoop.pre.statements);
|
swap(rewrite, forLoop.pre.statements);
|
||||||
rewrite.emplace_back(move(forLoop));
|
rewrite.emplace_back(move(forLoop));
|
||||||
return rewrite;
|
return rewrite;
|
||||||
}
|
}
|
||||||
return {};
|
else
|
||||||
|
{
|
||||||
|
visit(_stmt);
|
||||||
|
return {};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
48
test/libyul/yulOptimizerTests/forLoopInitRewriter/nested.yul
Normal file
48
test/libyul/yulOptimizerTests/forLoopInitRewriter/nested.yul
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
{
|
||||||
|
let random := 42
|
||||||
|
for {
|
||||||
|
for { let a := 1} iszero(eq(a,10)) {} {
|
||||||
|
a := add(a, 1)
|
||||||
|
}
|
||||||
|
let b := 1
|
||||||
|
} iszero(eq(b, 10)) {
|
||||||
|
for { let c := 1 } iszero(eq(c,2)) { c := add(c, 1) } {
|
||||||
|
b := add(b, 1)
|
||||||
|
}
|
||||||
|
} {
|
||||||
|
mstore(b,b)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// ----
|
||||||
|
// forLoopInitRewriter
|
||||||
|
// {
|
||||||
|
// let random := 42
|
||||||
|
// let a := 1
|
||||||
|
// for {
|
||||||
|
// }
|
||||||
|
// iszero(eq(a, 10))
|
||||||
|
// {
|
||||||
|
// }
|
||||||
|
// {
|
||||||
|
// a := add(a, 1)
|
||||||
|
// }
|
||||||
|
// let b := 1
|
||||||
|
// for {
|
||||||
|
// }
|
||||||
|
// iszero(eq(b, 10))
|
||||||
|
// {
|
||||||
|
// let c := 1
|
||||||
|
// for {
|
||||||
|
// }
|
||||||
|
// iszero(eq(c, 2))
|
||||||
|
// {
|
||||||
|
// c := add(c, 1)
|
||||||
|
// }
|
||||||
|
// {
|
||||||
|
// b := add(b, 1)
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// {
|
||||||
|
// mstore(b, b)
|
||||||
|
// }
|
||||||
|
// }
|
@ -468,8 +468,8 @@
|
|||||||
// let abi_encode_pos_590 := 64
|
// let abi_encode_pos_590 := 64
|
||||||
// abi_encode_pos := abi_encode_pos_590
|
// abi_encode_pos := abi_encode_pos_590
|
||||||
// let abi_encode_srcPtr := add(_485, _1)
|
// let abi_encode_srcPtr := add(_485, _1)
|
||||||
|
// let abi_encode_i_69 := _2
|
||||||
// for {
|
// for {
|
||||||
// let abi_encode_i_69 := _2
|
|
||||||
// }
|
// }
|
||||||
// lt(abi_encode_i_69, abi_encode_length_68)
|
// lt(abi_encode_i_69, abi_encode_length_68)
|
||||||
// {
|
// {
|
||||||
@ -480,8 +480,8 @@
|
|||||||
// let abi_encode_pos_71_1037 := abi_encode_pos
|
// let abi_encode_pos_71_1037 := abi_encode_pos
|
||||||
// let abi_encode_length_72_1038 := 0x3
|
// let abi_encode_length_72_1038 := 0x3
|
||||||
// let abi_encode_srcPtr_73_1039 := _931
|
// let abi_encode_srcPtr_73_1039 := _931
|
||||||
|
// let abi_encode_i_74_1040 := _2
|
||||||
// for {
|
// for {
|
||||||
// let abi_encode_i_74_1040 := _2
|
|
||||||
// }
|
// }
|
||||||
// lt(abi_encode_i_74_1040, abi_encode_length_72_1038)
|
// lt(abi_encode_i_74_1040, abi_encode_length_72_1038)
|
||||||
// {
|
// {
|
||||||
@ -544,8 +544,8 @@
|
|||||||
// {
|
// {
|
||||||
// revert(_2, _2)
|
// revert(_2, _2)
|
||||||
// }
|
// }
|
||||||
|
// let abi_decode_i_33_1052 := _2
|
||||||
// for {
|
// for {
|
||||||
// let abi_decode_i_33_1052 := _2
|
|
||||||
// }
|
// }
|
||||||
// lt(abi_decode_i_33_1052, abi_decode_length_30_1046)
|
// lt(abi_decode_i_33_1052, abi_decode_length_30_1046)
|
||||||
// {
|
// {
|
||||||
@ -586,8 +586,8 @@
|
|||||||
// {
|
// {
|
||||||
// revert(_2, _2)
|
// revert(_2, _2)
|
||||||
// }
|
// }
|
||||||
|
// let abi_decode_i_9_1068 := _2
|
||||||
// for {
|
// for {
|
||||||
// let abi_decode_i_9_1068 := _2
|
|
||||||
// }
|
// }
|
||||||
// lt(abi_decode_i_9_1068, abi_decode_length_6_1058)
|
// lt(abi_decode_i_9_1068, abi_decode_length_6_1058)
|
||||||
// {
|
// {
|
||||||
@ -616,8 +616,8 @@
|
|||||||
// {
|
// {
|
||||||
// revert(_2, _2)
|
// revert(_2, _2)
|
||||||
// }
|
// }
|
||||||
|
// let abi_decode_abi_decode_i_17_1073 := _2
|
||||||
// for {
|
// for {
|
||||||
// let abi_decode_abi_decode_i_17_1073 := _2
|
|
||||||
// }
|
// }
|
||||||
// lt(abi_decode_abi_decode_i_17_1073, abi_decode_abi_decode_length_14_1069)
|
// lt(abi_decode_abi_decode_i_17_1073, abi_decode_abi_decode_length_14_1069)
|
||||||
// {
|
// {
|
||||||
|
Loading…
Reference in New Issue
Block a user