mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Refactor SideEffects struct
This commit is contained in:
@@ -106,8 +106,9 @@ map<YulString, SideEffects> SideEffectsPropagator::sideEffects(
|
||||
for (auto const& function: _directCallGraph.functionsWithLoops + _directCallGraph.recursiveFunctions())
|
||||
{
|
||||
ret[function].movable = false;
|
||||
ret[function].sideEffectFree = false;
|
||||
ret[function].sideEffectFreeIfNoMSize = false;
|
||||
ret[function].canBeRemoved = false;
|
||||
ret[function].canBeRemovedIfNoMSize = false;
|
||||
ret[function].cannotLoop = false;
|
||||
}
|
||||
|
||||
for (auto const& call: _directCallGraph.functionCalls)
|
||||
|
||||
@@ -59,16 +59,17 @@ public:
|
||||
void operator()(FunctionCall const& _functionCall) override;
|
||||
|
||||
bool movable() const { return m_sideEffects.movable; }
|
||||
bool sideEffectFree(bool _allowMSizeModification = false) const
|
||||
bool canBeRemoved(bool _allowMSizeModification = false) const
|
||||
{
|
||||
if (_allowMSizeModification)
|
||||
return sideEffectFreeIfNoMSize();
|
||||
return m_sideEffects.canBeRemovedIfNoMSize;
|
||||
else
|
||||
return m_sideEffects.sideEffectFree;
|
||||
return m_sideEffects.canBeRemoved;
|
||||
}
|
||||
bool sideEffectFreeIfNoMSize() const { return m_sideEffects.sideEffectFreeIfNoMSize; }
|
||||
bool invalidatesStorage() const { return m_sideEffects.invalidatesStorage; }
|
||||
bool invalidatesMemory() const { return m_sideEffects.invalidatesMemory; }
|
||||
bool cannotLoop() const { return m_sideEffects.cannotLoop; }
|
||||
bool invalidatesStorage() const { return m_sideEffects.storage == SideEffects::Write; }
|
||||
bool invalidatesMemory() const { return m_sideEffects.memory == SideEffects::Write; }
|
||||
|
||||
|
||||
private:
|
||||
Dialect const& m_dialect;
|
||||
|
||||
@@ -93,7 +93,7 @@ void UnusedPruner::operator()(Block& _block)
|
||||
statement = Block{std::move(varDecl.location), {}};
|
||||
else if (
|
||||
SideEffectsCollector(m_dialect, *varDecl.value, m_functionSideEffects).
|
||||
sideEffectFree(m_allowMSizeOptimization)
|
||||
canBeRemoved(m_allowMSizeOptimization)
|
||||
)
|
||||
{
|
||||
subtractReferences(ReferencesCounter::countReferences(*varDecl.value));
|
||||
@@ -112,7 +112,7 @@ void UnusedPruner::operator()(Block& _block)
|
||||
ExpressionStatement& exprStmt = std::get<ExpressionStatement>(statement);
|
||||
if (
|
||||
SideEffectsCollector(m_dialect, exprStmt.expression, m_functionSideEffects).
|
||||
sideEffectFree(m_allowMSizeOptimization)
|
||||
canBeRemoved(m_allowMSizeOptimization)
|
||||
)
|
||||
{
|
||||
subtractReferences(ReferencesCounter::countReferences(exprStmt.expression));
|
||||
|
||||
Reference in New Issue
Block a user