Allow for per-parameter literalValues builtin functions

This commit is contained in:
Mathias Baumann
2020-04-08 16:41:38 +02:00
parent 582c754598
commit 5203503583
12 changed files with 75 additions and 52 deletions
+6 -4
View File
@@ -47,13 +47,15 @@ void ExpressionSplitter::run(OptimiserStepContext& _context, Block& _ast)
void ExpressionSplitter::operator()(FunctionCall& _funCall)
{
vector<bool> const* literalArgs = nullptr;
if (BuiltinFunction const* builtin = m_dialect.builtin(_funCall.functionName.name))
if (builtin->literalArguments)
// We cannot outline function arguments that have to be literals
return;
literalArgs = &builtin->literalArguments.value();
for (auto& arg: _funCall.arguments | boost::adaptors::reversed)
outlineExpression(arg);
for (size_t i = _funCall.arguments.size(); i > 0; i--)
if (!literalArgs || !(*literalArgs)[i - 1])
outlineExpression(_funCall.arguments[i - 1]);
}
void ExpressionSplitter::operator()(If& _if)