mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Make function grouper idempotent.
This commit is contained in:
parent
6414d63906
commit
f5b24a38b8
@ -33,6 +33,9 @@ using namespace dev::solidity;
|
|||||||
|
|
||||||
void FunctionGrouper::operator()(Block& _block)
|
void FunctionGrouper::operator()(Block& _block)
|
||||||
{
|
{
|
||||||
|
if (alreadyGrouped(_block))
|
||||||
|
return;
|
||||||
|
|
||||||
vector<Statement> reordered;
|
vector<Statement> reordered;
|
||||||
reordered.emplace_back(Block{_block.location, {}});
|
reordered.emplace_back(Block{_block.location, {}});
|
||||||
|
|
||||||
@ -45,3 +48,15 @@ void FunctionGrouper::operator()(Block& _block)
|
|||||||
}
|
}
|
||||||
_block.statements = std::move(reordered);
|
_block.statements = std::move(reordered);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool FunctionGrouper::alreadyGrouped(Block const& _block)
|
||||||
|
{
|
||||||
|
if (_block.statements.empty())
|
||||||
|
return false;
|
||||||
|
if (_block.statements.front().type() != typeid(Block))
|
||||||
|
return false;
|
||||||
|
for (size_t i = 1; i < _block.statements.size(); ++i)
|
||||||
|
if (_block.statements.at(i).type() != typeid(FunctionDefinition))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
@ -38,6 +38,9 @@ class FunctionGrouper
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
void operator()(Block& _block);
|
void operator()(Block& _block);
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool alreadyGrouped(Block const& _block);
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -26,13 +26,11 @@
|
|||||||
// fullInliner
|
// fullInliner
|
||||||
// {
|
// {
|
||||||
// {
|
// {
|
||||||
// {
|
// let f_x := 100
|
||||||
// let f_x := 100
|
// mstore(0, f_x)
|
||||||
// mstore(0, f_x)
|
// mstore(7, h())
|
||||||
// mstore(7, h())
|
// g(10)
|
||||||
// g(10)
|
// mstore(1, f_x)
|
||||||
// mstore(1, f_x)
|
|
||||||
// }
|
|
||||||
// }
|
// }
|
||||||
// function f(x)
|
// function f(x)
|
||||||
// {
|
// {
|
||||||
|
@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
{
|
||||||
|
let x := 2
|
||||||
|
}
|
||||||
|
function f() -> y { y := 8 }
|
||||||
|
}
|
||||||
|
// ----
|
||||||
|
// functionGrouper
|
||||||
|
// {
|
||||||
|
// {
|
||||||
|
// let x := 2
|
||||||
|
// }
|
||||||
|
// function f() -> y
|
||||||
|
// {
|
||||||
|
// y := 8
|
||||||
|
// }
|
||||||
|
// }
|
@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
function f() -> y { y := 8 }
|
||||||
|
{
|
||||||
|
let x := 2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// ----
|
||||||
|
// functionGrouper
|
||||||
|
// {
|
||||||
|
// {
|
||||||
|
// {
|
||||||
|
// let x := 2
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// function f() -> y
|
||||||
|
// {
|
||||||
|
// y := 8
|
||||||
|
// }
|
||||||
|
// }
|
Loading…
Reference in New Issue
Block a user