diff --git a/src/language/ast/ASTNodeAffectationExpressionBuilder.cpp b/src/language/ast/ASTNodeAffectationExpressionBuilder.cpp index cc26d368ee6cb0d6a3f105604ae6484628d69890..32117039587e2c53907ea030ac73a7e10e544255 100644 --- a/src/language/ast/ASTNodeAffectationExpressionBuilder.cpp +++ b/src/language/ast/ASTNodeAffectationExpressionBuilder.cpp @@ -37,12 +37,6 @@ ASTNodeAffectationExpressionBuilder::ASTNodeAffectationExpressionBuilder(ASTNode ASTNode& lhs_node = *node.children[0]; ASTNode& rhs_node = *node.children[1]; - if (rhs_node.m_data_type == ASTNodeDataType::list_t) { - if ((lhs_node.m_data_type == ASTNodeDataType::vector_t) or (lhs_node.m_data_type == ASTNodeDataType::matrix_t)) { - ASTNodeNaturalConversionChecker(rhs_node, lhs_node.m_data_type); - } - } - node.m_node_processor = optional_processor_builder.value()->getNodeProcessor(lhs_node, rhs_node); } else { std::ostringstream error_message; diff --git a/src/language/ast/ASTNodeBuiltinFunctionExpressionBuilder.cpp b/src/language/ast/ASTNodeBuiltinFunctionExpressionBuilder.cpp index cdd9c43d977c6718dc5d900dbe0b96a15de54f47..e2b4a947f1f93fff1060e6fab3f578265b37526c 100644 --- a/src/language/ast/ASTNodeBuiltinFunctionExpressionBuilder.cpp +++ b/src/language/ast/ASTNodeBuiltinFunctionExpressionBuilder.cpp @@ -85,16 +85,6 @@ ASTNodeBuiltinFunctionExpressionBuilder::_getArgumentConverter(const ASTNodeData // LCOV_EXCL_STOP } } - case ASTNodeDataType::list_t: { - if (argument_node_sub_data_type.m_parent_node.children.size() == parameter_v.dimension()) { - return std::make_unique<FunctionTinyVectorArgumentConverter<ParameterT, ParameterT>>(argument_number); - } else { - // LCOV_EXCL_START - throw ParseError("unexpected error: invalid argument dimension", - std::vector{argument_node_sub_data_type.m_parent_node.begin()}); - // LCOV_EXCL_STOP - } - } case ASTNodeDataType::int_t: { if (argument_node_sub_data_type.m_parent_node.is_type<language::integer>()) { if (std::stoi(argument_node_sub_data_type.m_parent_node.string()) == 0) { @@ -162,17 +152,6 @@ ASTNodeBuiltinFunctionExpressionBuilder::_getArgumentConverter(const ASTNodeData // LCOV_EXCL_STOP } } - case ASTNodeDataType::list_t: { - if (argument_node_sub_data_type.m_parent_node.children.size() == - (parameter_v.numberOfRows() * parameter_v.numberOfColumns())) { - return std::make_unique<FunctionTinyMatrixArgumentConverter<ParameterT, ParameterT>>(argument_number); - } else { - // LCOV_EXCL_START - throw ParseError("unexpected error: invalid argument dimension", - std::vector{argument_node_sub_data_type.m_parent_node.begin()}); - // LCOV_EXCL_STOP - } - } case ASTNodeDataType::int_t: { if (argument_node_sub_data_type.m_parent_node.is_type<language::integer>()) { if (std::stoi(argument_node_sub_data_type.m_parent_node.string()) == 0) { diff --git a/src/language/ast/ASTNodeExpressionBuilder.cpp b/src/language/ast/ASTNodeExpressionBuilder.cpp index 72b385495582d381d7c0f395d0bc21f7f397c3a0..4e61d118ead28e0a20345cc264a8bf3edc566d47 100644 --- a/src/language/ast/ASTNodeExpressionBuilder.cpp +++ b/src/language/ast/ASTNodeExpressionBuilder.cpp @@ -91,9 +91,11 @@ ASTNodeExpressionBuilder::_buildExpression(ASTNode& n) n.m_node_processor = std::make_unique<TinyVectorExpressionProcessor<3>>(n); break; } + // LCOV_EXCL_START default: { throw UnexpectedError("invalid vector dimension"); } + // LCOV_EXCL_STOP } } else if (n.is_type<language::matrix_expression>()) { Assert(n.m_data_type == ASTNodeDataType::matrix_t); @@ -112,9 +114,11 @@ ASTNodeExpressionBuilder::_buildExpression(ASTNode& n) n.m_node_processor = std::make_unique<TinyMatrixExpressionProcessor<3, 3>>(n); break; } + // LCOV_EXCL_START default: { throw UnexpectedError("invalid matrix dimension"); } + // LCOV_EXCL_STOP } } else if ((n.is_type<language::row_expression>())) { diff --git a/src/language/ast/ASTNodeFunctionExpressionBuilder.cpp b/src/language/ast/ASTNodeFunctionExpressionBuilder.cpp index a836d24cde04b68aa547005b93a77a4daa41e4db..a381123884250e9cd574495d7c3add369863aa59 100644 --- a/src/language/ast/ASTNodeFunctionExpressionBuilder.cpp +++ b/src/language/ast/ASTNodeFunctionExpressionBuilder.cpp @@ -78,16 +78,6 @@ ASTNodeFunctionExpressionBuilder::_getArgumentConverter(SymbolType& parameter_sy // LCOV_EXCL_STOP } } - case ASTNodeDataType::list_t: { - if (node_sub_data_type.m_parent_node.children.size() == parameter_v.dimension()) { - return std::make_unique<FunctionTinyVectorArgumentConverter<ParameterT, ParameterT>>(parameter_id); - } else { - // LCOV_EXCL_START - throw ParseError("unexpected error: invalid argument dimension", - std::vector{node_sub_data_type.m_parent_node.begin()}); - // LCOV_EXCL_STOP - } - } case ASTNodeDataType::int_t: { if (node_sub_data_type.m_parent_node.is_type<language::integer>()) { if (std::stoi(node_sub_data_type.m_parent_node.string()) == 0) { @@ -120,16 +110,6 @@ ASTNodeFunctionExpressionBuilder::_getArgumentConverter(SymbolType& parameter_sy // LCOV_EXCL_STOP } } - case ASTNodeDataType::list_t: { - if (node_sub_data_type.m_parent_node.children.size() == parameter_v.dimension()) { - return std::make_unique<FunctionTinyMatrixArgumentConverter<ParameterT, ParameterT>>(parameter_id); - } else { - // LCOV_EXCL_START - throw ParseError("unexpected error: invalid argument dimension", - std::vector{node_sub_data_type.m_parent_node.begin()}); - // LCOV_EXCL_STOP - } - } case ASTNodeDataType::int_t: { if (node_sub_data_type.m_parent_node.is_type<language::integer>()) { if (std::stoi(node_sub_data_type.m_parent_node.string()) == 0) { @@ -325,17 +305,6 @@ ASTNodeFunctionExpressionBuilder::_getFunctionProcessor(const ASTNodeDataType& r // LCOV_EXCL_STOP } } - case ASTNodeDataType::list_t: { - if (function_component_expression.children.size() == return_v.dimension()) { - return std::make_unique<FunctionExpressionProcessor<ReturnT, AggregateDataVariant>>( - function_component_expression); - } else { - // LCOV_EXCL_START - throw ParseError("unexpected error: invalid dimension for returned vector", - std::vector{function_component_expression.begin()}); - // LCOV_EXCL_STOP - } - } case ASTNodeDataType::int_t: { if (function_component_expression.is_type<language::integer>()) { if (std::stoi(function_component_expression.string()) == 0) { @@ -370,17 +339,6 @@ ASTNodeFunctionExpressionBuilder::_getFunctionProcessor(const ASTNodeDataType& r // LCOV_EXCL_STOP } } - case ASTNodeDataType::list_t: { - if (function_component_expression.children.size() == return_v.dimension()) { - return std::make_unique<FunctionExpressionProcessor<ReturnT, AggregateDataVariant>>( - function_component_expression); - } else { - // LCOV_EXCL_START - throw ParseError("unexpected error: invalid dimension for returned vector", - std::vector{function_component_expression.begin()}); - // LCOV_EXCL_STOP - } - } case ASTNodeDataType::int_t: { if (function_component_expression.is_type<language::integer>()) { if (std::stoi(function_component_expression.string()) == 0) { diff --git a/src/language/ast/ASTNodeListAffectationExpressionBuilder.cpp b/src/language/ast/ASTNodeListAffectationExpressionBuilder.cpp index 76b34ae5374adf13cfa82a513ca3e2fc13401400..6697967d2ab54950f7781ddfe41fa1c2197a28c8 100644 --- a/src/language/ast/ASTNodeListAffectationExpressionBuilder.cpp +++ b/src/language/ast/ASTNodeListAffectationExpressionBuilder.cpp @@ -58,9 +58,6 @@ ASTNodeListAffectationExpressionBuilder::_buildAffectationProcessor( if ((node_sub_data_type.m_data_type == ASTNodeDataType::vector_t) and (node_sub_data_type.m_data_type.dimension() == value.dimension())) { list_affectation_processor->template add<ValueT, ValueT>(value_node); - } else if ((node_sub_data_type.m_data_type == ASTNodeDataType::list_t) and - (node_sub_data_type.m_parent_node.children.size() == value.dimension())) { - list_affectation_processor->template add<ValueT, AggregateDataVariant>(value_node); } else if (node_sub_data_type.m_parent_node.is_type<language::integer>()) { if (std::stoi(node_sub_data_type.m_parent_node.string()) == 0) { list_affectation_processor->template add<ValueT, ZeroType>(value_node); @@ -96,9 +93,6 @@ ASTNodeListAffectationExpressionBuilder::_buildAffectationProcessor( (node_sub_data_type.m_data_type.numberOfRows() == value.numberOfRows()) and (node_sub_data_type.m_data_type.numberOfColumns() == value.numberOfColumns())) { list_affectation_processor->template add<ValueT, ValueT>(value_node); - } else if ((node_sub_data_type.m_data_type == ASTNodeDataType::list_t) and - (node_sub_data_type.m_parent_node.children.size() == value.numberOfRows() * value.numberOfColumns())) { - list_affectation_processor->template add<ValueT, AggregateDataVariant>(value_node); } else if (node_sub_data_type.m_parent_node.is_type<language::integer>()) { if (std::stoi(node_sub_data_type.m_parent_node.string()) == 0) { list_affectation_processor->template add<ValueT, ZeroType>(value_node); diff --git a/tests/test_ASTNodeDataType.cpp b/tests/test_ASTNodeDataType.cpp index 8c6219e2d9975a0f2e007b93b9e3beaa6285e955..29ee313082bd7908699c1227d0486aa31538300f 100644 --- a/tests/test_ASTNodeDataType.cpp +++ b/tests/test_ASTNodeDataType.cpp @@ -444,6 +444,16 @@ TEST_CASE("ASTNodeDataType", "[language]") REQUIRE_THROWS_WITH(getMatrixExpressionType(*matrix_expression_node), "unexpected node type"); } + SECTION("bad content type") + { + const size_t dimension = 3; + matrix_expression_node->children.clear(); + for (size_t i = 0; i < dimension; ++i) { + matrix_expression_node->children.emplace_back(std::make_unique<ASTNode>()); + } + REQUIRE_THROWS_WITH(getMatrixExpressionType(*matrix_expression_node), "expecting row expression"); + } + SECTION("bad children size 1") { matrix_expression_node->children.resize(4);