aboutsummaryrefslogtreecommitdiffstats
path: root/libyul/optimiser/UnusedPruner.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libyul/optimiser/UnusedPruner.cpp')
-rw-r--r--libyul/optimiser/UnusedPruner.cpp15
1 files changed, 10 insertions, 5 deletions
diff --git a/libyul/optimiser/UnusedPruner.cpp b/libyul/optimiser/UnusedPruner.cpp
index 31aead82..53c412e3 100644
--- a/libyul/optimiser/UnusedPruner.cpp
+++ b/libyul/optimiser/UnusedPruner.cpp
@@ -32,7 +32,8 @@ using namespace std;
using namespace dev;
using namespace yul;
-UnusedPruner::UnusedPruner(Block& _ast, set<YulString> const& _externallyUsedFunctions)
+UnusedPruner::UnusedPruner(Dialect const& _dialect, Block& _ast, set<YulString> const& _externallyUsedFunctions):
+ m_dialect(_dialect)
{
ReferencesCounter counter;
counter(_ast);
@@ -69,7 +70,7 @@ void UnusedPruner::operator()(Block& _block)
{
if (!varDecl.value)
statement = Block{std::move(varDecl.location), {}};
- else if (MovableChecker(*varDecl.value).movable())
+ else if (MovableChecker(m_dialect, *varDecl.value).movable())
{
subtractReferences(ReferencesCounter::countReferences(*varDecl.value));
statement = Block{std::move(varDecl.location), {}};
@@ -87,7 +88,7 @@ void UnusedPruner::operator()(Block& _block)
else if (statement.type() == typeid(ExpressionStatement))
{
ExpressionStatement& exprStmt = boost::get<ExpressionStatement>(statement);
- if (MovableChecker(exprStmt.expression).movable())
+ if (MovableChecker(m_dialect, exprStmt.expression).movable())
{
// pop(x) should be movable!
subtractReferences(ReferencesCounter::countReferences(exprStmt.expression));
@@ -100,11 +101,15 @@ void UnusedPruner::operator()(Block& _block)
ASTModifier::operator()(_block);
}
-void UnusedPruner::runUntilStabilised(Block& _ast, set<YulString> const& _externallyUsedFunctions)
+void UnusedPruner::runUntilStabilised(
+ Dialect const& _dialect,
+ Block& _ast,
+ set<YulString> const& _externallyUsedFunctions
+)
{
while (true)
{
- UnusedPruner pruner(_ast, _externallyUsedFunctions);
+ UnusedPruner pruner(_dialect, _ast, _externallyUsedFunctions);
pruner(_ast);
if (!pruner.shouldRunAgain())
return;