From 82799df3b1e12c99520c1ffb5930249d48057531 Mon Sep 17 00:00:00 2001 From: Stephane Del Pino <stephane.delpino44@gmail.com> Date: Tue, 26 May 2020 19:08:49 +0200 Subject: [PATCH] Add treatment of tuple of basic types as builtin function arguments --- ...STNodeBuiltinFunctionExpressionBuilder.cpp | 39 +++++++++++++++++-- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/src/language/ast/ASTNodeBuiltinFunctionExpressionBuilder.cpp b/src/language/ast/ASTNodeBuiltinFunctionExpressionBuilder.cpp index c01d3b29c..3f1ff4369 100644 --- a/src/language/ast/ASTNodeBuiltinFunctionExpressionBuilder.cpp +++ b/src/language/ast/ASTNodeBuiltinFunctionExpressionBuilder.cpp @@ -122,14 +122,45 @@ ASTNodeBuiltinFunctionExpressionBuilder::_getArgumentConverter(const ASTNodeData using ParameterContentT = std::decay_t<decltype(parameter_content_v)>; switch (argument_node_sub_data_type.m_data_type) { case ASTNodeDataType::tuple_t: { - switch (argument_node_sub_data_type.m_data_type.contentType()) { + const auto& arg_content_type = argument_node_sub_data_type.m_data_type.contentType(); + switch (arg_content_type) { case ASTNodeDataType::type_id_t: { return std::make_unique<FunctionTupleArgumentConverter<ParameterContentT, EmbeddedData>>(argument_number); } + case ASTNodeDataType::bool_t: { + return std::make_unique<FunctionTupleArgumentConverter<ParameterContentT, bool>>(argument_number); + } + case ASTNodeDataType::unsigned_int_t: { + return std::make_unique<FunctionTupleArgumentConverter<ParameterContentT, uint64_t>>(argument_number); + } + case ASTNodeDataType::int_t: { + return std::make_unique<FunctionTupleArgumentConverter<ParameterContentT, int64_t>>(argument_number); + } + case ASTNodeDataType::double_t: { + return std::make_unique<FunctionTupleArgumentConverter<ParameterContentT, double>>(argument_number); + } + case ASTNodeDataType::string_t: { + return std::make_unique<FunctionTupleArgumentConverter<ParameterContentT, std::string>>(argument_number); + } + case ASTNodeDataType::vector_t: { + switch (arg_content_type.dimension()) { + case 1: { + return std::make_unique<FunctionTupleArgumentConverter<ParameterContentT, TinyVector<1>>>(argument_number); + } + case 2: { + return std::make_unique<FunctionTupleArgumentConverter<ParameterContentT, TinyVector<2>>>(argument_number); + } + case 3: { + return std::make_unique<FunctionTupleArgumentConverter<ParameterContentT, TinyVector<3>>>(argument_number); + } + default: { + throw UnexpectedError(dataTypeName(arg_content_type) + + " unexpected content of argument, invalid dimension of vector"); + } + } + } default: { - throw UnexpectedError(dataTypeName(argument_node_sub_data_type.m_data_type.contentType()) + - " unexpected tuple content type of argument "); - // return get_function_argument_converter_to_tuple_from_tuple(parameter_content_v); + throw UnexpectedError(dataTypeName(arg_content_type) + " unexpected tuple content type of argument "); } } } -- GitLab