aboutsummaryrefslogtreecommitdiffstats
path: root/libyul/optimiser/Semantics.cpp
diff options
context:
space:
mode:
authorchriseth <chris@ethereum.org>2018-12-21 01:55:32 +0800
committerchriseth <chris@ethereum.org>2019-01-07 23:41:03 +0800
commit9222eff08fad8e6a0ea7df8b299880f90c68c8b3 (patch)
tree20b9a2e40164fb693ab52e75ad1cd2388d142473 /libyul/optimiser/Semantics.cpp
parentd9910f2a1258e8d16d7a57905dabcd09db4e6a8d (diff)
downloaddexon-solidity-9222eff08fad8e6a0ea7df8b299880f90c68c8b3.tar
dexon-solidity-9222eff08fad8e6a0ea7df8b299880f90c68c8b3.tar.gz
dexon-solidity-9222eff08fad8e6a0ea7df8b299880f90c68c8b3.tar.bz2
dexon-solidity-9222eff08fad8e6a0ea7df8b299880f90c68c8b3.tar.lz
dexon-solidity-9222eff08fad8e6a0ea7df8b299880f90c68c8b3.tar.xz
dexon-solidity-9222eff08fad8e6a0ea7df8b299880f90c68c8b3.tar.zst
dexon-solidity-9222eff08fad8e6a0ea7df8b299880f90c68c8b3.zip
Make the dialect available everywhere.
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;
}