aboutsummaryrefslogtreecommitdiffstats
path: root/libjulia
diff options
context:
space:
mode:
authorchriseth <chris@ethereum.org>2018-02-06 22:51:46 +0800
committerchriseth <chris@ethereum.org>2018-05-02 23:39:42 +0800
commitbf27e869842790cd3e4c84f5c820d80a4071ee5c (patch)
tree2e9825d5fc6d3863fa7f35b140bc9c0f4ada1e1e /libjulia
parentc7245ba362e2300c794451328639ef924325771a (diff)
downloaddexon-solidity-bf27e869842790cd3e4c84f5c820d80a4071ee5c.tar
dexon-solidity-bf27e869842790cd3e4c84f5c820d80a4071ee5c.tar.gz
dexon-solidity-bf27e869842790cd3e4c84f5c820d80a4071ee5c.tar.bz2
dexon-solidity-bf27e869842790cd3e4c84f5c820d80a4071ee5c.tar.lz
dexon-solidity-bf27e869842790cd3e4c84f5c820d80a4071ee5c.tar.xz
dexon-solidity-bf27e869842790cd3e4c84f5c820d80a4071ee5c.tar.zst
dexon-solidity-bf27e869842790cd3e4c84f5c820d80a4071ee5c.zip
Extend pop(0)-remover to any movable expression.
Diffstat (limited to 'libjulia')
-rw-r--r--libjulia/optimiser/FullInliner.cpp7
1 files changed, 3 insertions, 4 deletions
diff --git a/libjulia/optimiser/FullInliner.cpp b/libjulia/optimiser/FullInliner.cpp
index d2d9d188..10955e94 100644
--- a/libjulia/optimiser/FullInliner.cpp
+++ b/libjulia/optimiser/FullInliner.cpp
@@ -23,6 +23,7 @@
#include <libjulia/optimiser/ASTCopier.h>
#include <libjulia/optimiser/ASTWalker.h>
#include <libjulia/optimiser/NameCollector.h>
+#include <libjulia/optimiser/Semantics.h>
#include <libsolidity/inlineasm/AsmData.h>
@@ -159,7 +160,7 @@ void InlineModifier::visit(Expression& _expression)
void InlineModifier::visit(Statement& _statement)
{
ASTModifier::visit(_statement);
- // Replace pop(0) expression statemets by empty blocks.
+ // Replace pop(0) expression statemets (and others) by empty blocks.
if (_statement.type() == typeid(ExpressionStatement))
{
ExpressionStatement& expSt = boost::get<ExpressionStatement&>(_statement);
@@ -167,10 +168,8 @@ void InlineModifier::visit(Statement& _statement)
{
FunctionalInstruction& funInstr = boost::get<FunctionalInstruction&>(expSt.expression);
if (funInstr.instruction == solidity::Instruction::POP)
- {
- if (funInstr.arguments.at(0).type() == typeid(Literal))
+ if (MovableChecker(funInstr.arguments.at(0)).movable())
_statement = Block{expSt.location, {}};
- }
}
}
}