Skip to content
Snippets Groups Projects
Commit e556825d authored by Stéphane Del Pino's avatar Stéphane Del Pino
Browse files

Improve ASTNodeBuiltinFunctionExpressionBuilder and add unit tests

Remove some unreachable code and add missing treatment for bool-tuples
parent 8d0ee86b
No related branches found
No related tags found
1 merge request!37Feature/language
......@@ -152,29 +152,11 @@ ASTNodeBuiltinFunctionExpressionBuilder::_getArgumentConverter(const ASTNodeData
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 (tuple_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(tuple_content_type) +
" unexpected content of argument, invalid dimension of vector");
}
}
}
// LCOV_EXCL_START
default: {
throw UnexpectedError(dataTypeName(tuple_content_type) + " unexpected tuple content type of argument ");
}
// LCOV_EXCL_STOP
}
}
case ASTNodeDataType::list_t: {
......@@ -195,9 +177,6 @@ ASTNodeBuiltinFunctionExpressionBuilder::_getArgumentConverter(const ASTNodeData
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_data_type.dimension()) {
case 1: {
......@@ -209,14 +188,18 @@ ASTNodeBuiltinFunctionExpressionBuilder::_getArgumentConverter(const ASTNodeData
case 3: {
return std::make_unique<FunctionTupleArgumentConverter<ParameterContentT, TinyVector<3>>>(argument_number);
}
// LCOV_EXCL_START
default: {
throw UnexpectedError(dataTypeName(arg_data_type) + " unexpected dimension of vector");
}
// LCOV_EXCL_STOP
}
}
// LCOV_EXCL_START
default: {
throw UnexpectedError(dataTypeName(arg_data_type) + " argument to tuple ");
}
// LCOV_EXCL_STOP
}
};
......@@ -284,6 +267,9 @@ ASTNodeBuiltinFunctionExpressionBuilder::_getArgumentConverter(const ASTNodeData
case ASTNodeDataType::type_id_t: {
return get_function_argument_to_tuple_converter(EmbeddedData{});
}
case ASTNodeDataType::bool_t: {
return get_function_argument_to_tuple_converter(bool{});
}
case ASTNodeDataType::unsigned_int_t: {
return get_function_argument_to_tuple_converter(uint64_t{});
}
......@@ -297,16 +283,11 @@ ASTNodeBuiltinFunctionExpressionBuilder::_getArgumentConverter(const ASTNodeData
switch (parameter_type.dimension()) {
case 1: {
return get_function_argument_to_tuple_converter(TinyVector<1>{});
}
case 2: {
return get_function_argument_to_tuple_converter(TinyVector<2>{});
}
case 3: {
return get_function_argument_to_tuple_converter(TinyVector<3>{});
}
// LCOV_EXCL_START
default: {
throw parse_error("unexpected error: unexpected tuple content for function",
throw parse_error("unexpected error: unexpected tuple content for function: '" +
dataTypeName(parameter_type) + "'",
std::vector{argument_node_sub_data_type.m_parent_node.begin()});
}
// LCOV_EXCL_STOP
......@@ -315,10 +296,12 @@ ASTNodeBuiltinFunctionExpressionBuilder::_getArgumentConverter(const ASTNodeData
case ASTNodeDataType::string_t: {
return get_function_argument_to_string_converter();
}
// LCOV_EXCL_START
default: {
throw parse_error("unexpected error: unexpected tuple content type for function",
std::vector{argument_node_sub_data_type.m_parent_node.begin()});
}
// LCOV_EXCL_STOP
}
}
// LCOV_EXCL_START
......@@ -331,7 +314,9 @@ ASTNodeBuiltinFunctionExpressionBuilder::_getArgumentConverter(const ASTNodeData
};
if (parameter_type == ASTNodeDataType::vector_t and parameter_type.dimension() == 1) {
if (not isNaturalConversion(argument_node_sub_data_type.m_data_type, parameter_type)) {
ASTNodeNaturalConversionChecker{argument_node_sub_data_type, ASTNodeDataType::double_t};
}
} else {
ASTNodeNaturalConversionChecker{argument_node_sub_data_type, parameter_type};
}
......
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment