From 6cc92f7f0a51eef55e51337faccc7327ee4c297b Mon Sep 17 00:00:00 2001
From: Stephane Del Pino <stephane.delpino44@gmail.com>
Date: Wed, 11 Dec 2019 18:58:15 +0100
Subject: [PATCH] Fix argument conversion to parameter values for compound
 types

Now the following code is valid
``
let f : N -> N*N, i -> (i+1, 2*i);
let g : N*N -> N, (i,j) -> (i+1)*(j+1);

N i = g(f(2));
``
`i` will contain the value `20` as expected
---
 src/language/node_processor/FunctionProcessor.hpp | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/language/node_processor/FunctionProcessor.hpp b/src/language/node_processor/FunctionProcessor.hpp
index 41e856d47..be95d2aff 100644
--- a/src/language/node_processor/FunctionProcessor.hpp
+++ b/src/language/node_processor/FunctionProcessor.hpp
@@ -100,15 +100,15 @@ class FunctionProcessor : public INodeProcessor
                                                                  std::make_shared<ExecutionPolicy::Context::Values>(
                                                                    m_context_size)}};
 
-    if (m_argument_node.is_type<language::function_argument_list>()) {
+    if (m_argument_converters.size() == 1) {
+      m_argument_converters[0]->convert(context_exec_policy, m_argument_node.execute(context_exec_policy));
+    } else {
       AggregateDataVariant argument_values{
         std::get<AggregateDataVariant>(m_argument_node.execute(context_exec_policy))};
 
       for (size_t i = 0; i < m_argument_converters.size(); ++i) {
         m_argument_converters[i]->convert(context_exec_policy, std::move(argument_values[i]));
       }
-    } else {
-      m_argument_converters[0]->convert(context_exec_policy, m_argument_node.execute(context_exec_policy));
     }
 
     if (m_function_expression_processors.size() == 1) {
-- 
GitLab