diff --git a/src/language/node_processor/AffectationProcessor.hpp b/src/language/node_processor/AffectationProcessor.hpp index 1675793a66009eb04246334d7218dd98b2d95c21..c58ea1670440107fadf2d350aaa75b76ae0de29f 100644 --- a/src/language/node_processor/AffectationProcessor.hpp +++ b/src/language/node_processor/AffectationProcessor.hpp @@ -423,6 +423,9 @@ class AffectationToTupleProcessor final : public INodeProcessor } } else if constexpr (std::is_same_v<ValueT, TinyVector<1>> and std::is_arithmetic_v<T>) { *m_lhs = std::vector{TinyVector<1>{static_cast<double>(v)}}; + } else if constexpr (is_tiny_vector_v<ValueT> and std::is_same_v<T, int64_t>) { + Assert(v == 0); + *m_lhs = std::vector<ValueT>{zero}; } else { // LCOV_EXCL_START throw ParseError("unexpected error: unexpected right hand side type in affectation", m_node.begin()); diff --git a/tests/test_ASTBuilder.cpp b/tests/test_ASTBuilder.cpp index 2399a78617d6a6f30774fbc70be735d5850967d3..7353fa9a46d6d08542c62d4bee89299c930fc5a1 100644 --- a/tests/test_ASTBuilder.cpp +++ b/tests/test_ASTBuilder.cpp @@ -620,6 +620,41 @@ clog << "log " << l << "\n"; +-(language::literal:"log ") +-(language::name:l) `-(language::literal:"\n") +)"; + CHECK_AST(data, result); + } + + SECTION("tuple list simplification") + { + std::string_view data = R"( +let x:(R^2), x=((0,0),(2,3)); +let y:(R^2), y=((0)); +)"; + + std::string_view result = R"( +(root) + +-(language::var_declaration) + | +-(language::name:x) + | +-(language::tuple_type_specifier) + | | `-(language::vector_type) + | | +-(language::R_set) + | | `-(language::integer:2) + | +-(language::name:x) + | `-(language::expression_list) + | +-(language::tuple_expression) + | | +-(language::integer:0) + | | `-(language::integer:0) + | `-(language::tuple_expression) + | +-(language::integer:2) + | `-(language::integer:3) + `-(language::var_declaration) + +-(language::name:y) + +-(language::tuple_type_specifier) + | `-(language::vector_type) + | +-(language::R_set) + | `-(language::integer:2) + +-(language::name:y) + `-(language::integer:0) )"; CHECK_AST(data, result); } diff --git a/tests/test_AffectationToTupleProcessor.cpp b/tests/test_AffectationToTupleProcessor.cpp index b778fdeaefa7eb9822694844c70eebf1327d87e2..bb7f8a29901f630f80760e92fc026a4765ba755b 100644 --- a/tests/test_AffectationToTupleProcessor.cpp +++ b/tests/test_AffectationToTupleProcessor.cpp @@ -122,6 +122,11 @@ let t :(R^2); t = ((1,2),0); )", "t", (std::vector<TinyVector<2>>{TinyVector<2>{1, 2}, TinyVector<2>{0, 0}})); + CHECK_AFFECTATION_RESULT(R"( +let t :(R^2); t = (0); +)", + "t", (std::vector<TinyVector<2>>{TinyVector<2>{0, 0}})); + CHECK_AFFECTATION_RESULT(R"( let x : R^1, x = 1; let t :(R^1); t = (x,2);