aboutsummaryrefslogtreecommitdiffstats
path: root/libyul/optimiser/Semantics.cpp
diff options
context:
space:
mode:
authorchriseth <chris@ethereum.org>2019-01-22 20:49:41 +0800
committerGitHub <noreply@github.com>2019-01-22 20:49:41 +0800
commit10d17f245839f208ec5085309022a32cd2502f55 (patch)
treeb2c9f68980d0d418cd6f511e9f3f3f71369abe25 /libyul/optimiser/Semantics.cpp
parent1df8f40cd2fd7b47698d847907b8ca7b47eb488d (diff)
parent0ecafe032a84cb6960545dd7f18733430c1f782d (diff)
downloaddexon-solidity-10d17f245839f208ec5085309022a32cd2502f55.tar
dexon-solidity-10d17f245839f208ec5085309022a32cd2502f55.tar.gz
dexon-solidity-10d17f245839f208ec5085309022a32cd2502f55.tar.bz2
dexon-solidity-10d17f245839f208ec5085309022a32cd2502f55.tar.lz
dexon-solidity-10d17f245839f208ec5085309022a32cd2502f55.tar.xz
dexon-solidity-10d17f245839f208ec5085309022a32cd2502f55.tar.zst
dexon-solidity-10d17f245839f208ec5085309022a32cd2502f55.zip
Merge pull request #5836 from ethereum/develop
Merge develop into release for 0.5.3.
Diffstat (limited to 'libyul/optimiser/Semantics.cpp')
-rw-r--r--libyul/optimiser/Semantics.cpp17
1 files changed, 15 insertions, 2 deletions
diff --git a/libyul/optimiser/Semantics.cpp b/libyul/optimiser/Semantics.cpp
index 91bb2709..7edf97d7 100644
--- a/libyul/optimiser/Semantics.cpp
+++ b/libyul/optimiser/Semantics.cpp
@@ -22,6 +22,7 @@
#include <libyul/Exceptions.h>
#include <libyul/AsmData.h>
+#include <libyul/Dialect.h>
#include <libevmasm/SemanticInformation.h>
@@ -31,7 +32,13 @@ using namespace std;
using namespace dev;
using namespace yul;
-MovableChecker::MovableChecker(Expression const& _expression)
+MovableChecker::MovableChecker(Dialect const& _dialect):
+ m_dialect(_dialect)
+{
+}
+
+MovableChecker::MovableChecker(Dialect const& _dialect, Expression const& _expression):
+ MovableChecker(_dialect)
{
visit(_expression);
}
@@ -50,8 +57,14 @@ void MovableChecker::operator()(FunctionalInstruction const& _instr)
ASTWalker::operator()(_instr);
}
-void MovableChecker::operator()(FunctionCall const&)
+void MovableChecker::operator()(FunctionCall const& _functionCall)
{
+ if (BuiltinFunction const* f = m_dialect.builtin(_functionCall.functionName.name))
+ if (f->movable)
+ {
+ ASTWalker::operator()(_functionCall);
+ return;
+ }
m_movable = false;
}