mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Optimize number of moves.
This commit is contained in:
parent
12b47a6e0b
commit
ca9fa053b7
@ -92,21 +92,27 @@ void InlineModifier::operator()(ForLoop& _loop)
|
|||||||
|
|
||||||
void InlineModifier::operator()(Block& _block)
|
void InlineModifier::operator()(Block& _block)
|
||||||
{
|
{
|
||||||
// TODO: optimize the number of moves here.
|
// This is only used if needed to minimize the number of move operations.
|
||||||
|
vector<Statement> modifiedStatements;
|
||||||
for (size_t i = 0; i < _block.statements.size(); ++i)
|
for (size_t i = 0; i < _block.statements.size(); ++i)
|
||||||
{
|
{
|
||||||
visit(_block.statements.at(i));
|
visit(_block.statements.at(i));
|
||||||
if (size_t length = m_statementsToPrefix.size())
|
if (!m_statementsToPrefix.empty())
|
||||||
{
|
{
|
||||||
_block.statements.insert(
|
if (modifiedStatements.empty())
|
||||||
|
std::move(
|
||||||
|
_block.statements.begin(),
|
||||||
_block.statements.begin() + i,
|
_block.statements.begin() + i,
|
||||||
std::make_move_iterator(m_statementsToPrefix.begin()),
|
back_inserter(modifiedStatements)
|
||||||
std::make_move_iterator(m_statementsToPrefix.end())
|
|
||||||
);
|
);
|
||||||
i += length;
|
modifiedStatements += std::move(m_statementsToPrefix);
|
||||||
m_statementsToPrefix.clear();
|
m_statementsToPrefix.clear();
|
||||||
}
|
}
|
||||||
|
if (!modifiedStatements.empty())
|
||||||
|
modifiedStatements.emplace_back(std::move(_block.statements[i]));
|
||||||
}
|
}
|
||||||
|
if (!modifiedStatements.empty())
|
||||||
|
_block.statements = std::move(modifiedStatements);
|
||||||
}
|
}
|
||||||
|
|
||||||
void InlineModifier::visit(Expression& _expression)
|
void InlineModifier::visit(Expression& _expression)
|
||||||
|
Loading…
Reference in New Issue
Block a user