diff options
author | chriseth <chris@ethereum.org> | 2018-12-21 00:22:17 +0800 |
---|---|---|
committer | chriseth <chris@ethereum.org> | 2019-01-08 00:23:38 +0800 |
commit | 5b73c2ae3bce09442572b5401a7bcccc2ffe7590 (patch) | |
tree | d2e5b07ef78f240b3b8d1ae72cfae4054ce6e41e /libyul/optimiser/ExpressionSplitter.cpp | |
parent | 9f5d34af7de481c5b8ce89057a6df2a3283d14b0 (diff) | |
download | dexon-solidity-5b73c2ae3bce09442572b5401a7bcccc2ffe7590.tar.gz dexon-solidity-5b73c2ae3bce09442572b5401a7bcccc2ffe7590.tar.zst dexon-solidity-5b73c2ae3bce09442572b5401a7bcccc2ffe7590.zip |
Take special functions that require literals into account.
Diffstat (limited to 'libyul/optimiser/ExpressionSplitter.cpp')
-rw-r--r-- | libyul/optimiser/ExpressionSplitter.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/libyul/optimiser/ExpressionSplitter.cpp b/libyul/optimiser/ExpressionSplitter.cpp index a3b2dc11..334e33f4 100644 --- a/libyul/optimiser/ExpressionSplitter.cpp +++ b/libyul/optimiser/ExpressionSplitter.cpp @@ -24,6 +24,7 @@ #include <libyul/optimiser/ASTWalker.h> #include <libyul/AsmData.h> +#include <libyul/Dialect.h> #include <libdevcore/CommonData.h> @@ -43,6 +44,11 @@ void ExpressionSplitter::operator()(FunctionalInstruction& _instruction) void ExpressionSplitter::operator()(FunctionCall& _funCall) { + if (BuiltinFunction const* builtin = m_dialect.builtin(_funCall.functionName.name)) + if (builtin->literalArguments) + // We cannot outline function arguments that have to be literals + return; + for (auto& arg: _funCall.arguments | boost::adaptors::reversed) outlineExpression(arg); } |