aboutsummaryrefslogtreecommitdiffstats
path: root/libjulia
diff options
context:
space:
mode:
authorchriseth <chris@ethereum.org>2018-01-18 21:40:11 +0800
committerchriseth <chris@ethereum.org>2018-05-02 23:39:42 +0800
commitc7245ba362e2300c794451328639ef924325771a (patch)
treef4066a8e06877e2d60501b5ff95079a75cd6a99e /libjulia
parent4370bf5c40ed1942c2dec38bad67e0b10f3d84c7 (diff)
downloaddexon-solidity-c7245ba362e2300c794451328639ef924325771a.tar.gz
dexon-solidity-c7245ba362e2300c794451328639ef924325771a.tar.zst
dexon-solidity-c7245ba362e2300c794451328639ef924325771a.zip
Replace pop(0)-statements by empty blocks.
Diffstat (limited to 'libjulia')
-rw-r--r--libjulia/optimiser/FullInliner.cpp19
-rw-r--r--libjulia/optimiser/FullInliner.h1
2 files changed, 20 insertions, 0 deletions
diff --git a/libjulia/optimiser/FullInliner.cpp b/libjulia/optimiser/FullInliner.cpp
index 42cbc804..d2d9d188 100644
--- a/libjulia/optimiser/FullInliner.cpp
+++ b/libjulia/optimiser/FullInliner.cpp
@@ -156,6 +156,25 @@ void InlineModifier::visit(Expression& _expression)
m_statementsToPrefix.emplace_back(BodyCopier(m_nameDispenser, fun.name + "_", variableReplacements)(fun.body));
}
+void InlineModifier::visit(Statement& _statement)
+{
+ ASTModifier::visit(_statement);
+ // Replace pop(0) expression statemets by empty blocks.
+ if (_statement.type() == typeid(ExpressionStatement))
+ {
+ ExpressionStatement& expSt = boost::get<ExpressionStatement&>(_statement);
+ if (expSt.expression.type() == typeid(FunctionalInstruction))
+ {
+ FunctionalInstruction& funInstr = boost::get<FunctionalInstruction&>(expSt.expression);
+ if (funInstr.instruction == solidity::Instruction::POP)
+ {
+ if (funInstr.arguments.at(0).type() == typeid(Literal))
+ _statement = Block{expSt.location, {}};
+ }
+ }
+ }
+}
+
void InlineModifier::visitArguments(
vector<Expression>& _arguments,
vector<string> const& _nameHints,
diff --git a/libjulia/optimiser/FullInliner.h b/libjulia/optimiser/FullInliner.h
index 21998452..d3dec3b2 100644
--- a/libjulia/optimiser/FullInliner.h
+++ b/libjulia/optimiser/FullInliner.h
@@ -116,6 +116,7 @@ public:
using ASTModifier::visit;
virtual void visit(Expression& _expression) override;
+ virtual void visit(Statement& _st) override;
private: