aboutsummaryrefslogtreecommitdiffstats
path: root/libyul/optimiser/Metrics.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libyul/optimiser/Metrics.cpp')
-rw-r--r--libyul/optimiser/Metrics.cpp16
1 files changed, 13 insertions, 3 deletions
diff --git a/libyul/optimiser/Metrics.cpp b/libyul/optimiser/Metrics.cpp
index a351f1d1..fb275cc3 100644
--- a/libyul/optimiser/Metrics.cpp
+++ b/libyul/optimiser/Metrics.cpp
@@ -25,6 +25,9 @@
#include <libevmasm/Instruction.h>
+#include <libdevcore/Visitor.h>
+
+using namespace std;
using namespace dev;
using namespace yul;
@@ -45,7 +48,7 @@ size_t CodeSize::codeSize(Expression const& _expression)
size_t CodeSize::codeSize(Block const& _block)
{
CodeSize cs;
- cs(_block);
+ cs.visit(_block);
return cs.m_size;
}
@@ -53,14 +56,21 @@ void CodeSize::visit(Statement const& _statement)
{
if (_statement.type() == typeid(FunctionDefinition))
return;
+ else if (!(
+ _statement.type() == typeid(Block) ||
+ _statement.type() == typeid(ExpressionStatement) ||
+ _statement.type() == typeid(Assignment) ||
+ _statement.type() == typeid(VariableDeclaration)
+ ))
+ ++m_size;
- ++m_size;
ASTWalker::visit(_statement);
}
void CodeSize::visit(Expression const& _expression)
{
- ++m_size;
+ if (_expression.type() != typeid(Identifier))
+ ++m_size;
ASTWalker::visit(_expression);
}