From cbe794fb420cb4f769a6d5942519837042399716 Mon Sep 17 00:00:00 2001
From: Stephane Del Pino <stephane.delpino44@gmail.com>
Date: Sun, 13 Oct 2019 23:58:18 +0200
Subject: [PATCH] Fix operator precedence

AST was not rearranged correctly
---
 src/language/ASTBuilder.cpp |  2 +-
 tests/test_ASTBuilder.cpp   | 72 ++++++++++++++++++-------------------
 2 files changed, 37 insertions(+), 37 deletions(-)

diff --git a/src/language/ASTBuilder.cpp b/src/language/ASTBuilder.cpp
index 9e187baf3..3e51cda19 100644
--- a/src/language/ASTBuilder.cpp
+++ b/src/language/ASTBuilder.cpp
@@ -233,7 +233,7 @@ using selector =
                                                      for_statement,
                                                      break_kw,
                                                      continue_kw>,
-                       ASTBuilder::rearrange::on<product, affectation, expression>,
+                       ASTBuilder::rearrange::on<logical_or, logical_and, bitwise_xor, equality, compare, sum, product, affectation, expression>,
                        ASTBuilder::simplify_unary::
                          on<unary_minus, unary_plus, unary_not, function_evaluation, type_expression, unary_expression>,
                        parse_tree::remove_content::on<plus_op,
diff --git a/tests/test_ASTBuilder.cpp b/tests/test_ASTBuilder.cpp
index 11bdaa22a..9e30272f2 100644
--- a/tests/test_ASTBuilder.cpp
+++ b/tests/test_ASTBuilder.cpp
@@ -170,43 +170,43 @@ string s; s = "foo";
 
         std::string_view result = R"(
 (root)
- `-(language::minus_op)
-     +-(language::plus_op)
-     |   +-(language::xor_op)
-     |   |   +-(language::greater_op)
-     |   |   |   +-(language::lesser_op)
-     |   |   |   |   +-(language::or_op)
-     |   |   |   |   |   +-(language::and_op)
-     |   |   |   |   |   |   +-(language::xor_op)
-     |   |   |   |   |   |   |   +-(language::greater_or_eq_op)
-     |   |   |   |   |   |   |   |   +-(language::or_op)
-     |   |   |   |   |   |   |   |   |   +-(language::eqeq_op)
-     |   |   |   |   |   |   |   |   |   |   +-(language::minus_op)
-     |   |   |   |   |   |   |   |   |   |   |   +-(language::lesser_or_eq_op)
-     |   |   |   |   |   |   |   |   |   |   |   |   +-(language::and_op)
-     |   |   |   |   |   |   |   |   |   |   |   |   |   +-(language::plus_op)
-     |   |   |   |   |   |   |   |   |   |   |   |   |   |   +-(language::integer:1)
-     |   |   |   |   |   |   |   |   |   |   |   |   |   |   `-(language::integer:2)
-     |   |   |   |   |   |   |   |   |   |   |   |   |   `-(language::integer:3)
-     |   |   |   |   |   |   |   |   |   |   |   |   `-(language::multiply_op)
-     |   |   |   |   |   |   |   |   |   |   |   |       +-(language::integer:2)
-     |   |   |   |   |   |   |   |   |   |   |   |       `-(language::integer:4)
-     |   |   |   |   |   |   |   |   |   |   |   `-(language::integer:1)
-     |   |   |   |   |   |   |   |   |   |   `-(language::integer:2)
-     |   |   |   |   |   |   |   |   |   `-(language::integer:2)
-     |   |   |   |   |   |   |   |   `-(language::divide_op)
-     |   |   |   |   |   |   |   |       +-(language::integer:1)
-     |   |   |   |   |   |   |   |       `-(language::integer:5)
-     |   |   |   |   |   |   |   `-(language::integer:7)
-     |   |   |   |   |   |   `-(language::integer:2)
-     |   |   |   |   |   `-(language::integer:2)
-     |   |   |   |   `-(language::integer:3)
-     |   |   |   `-(language::integer:7)
-     |   |   `-(language::unary_minus)
+ `-(language::or_op)
+     +-(language::or_op)
+     |   +-(language::and_op)
+     |   |   +-(language::plus_op)
+     |   |   |   +-(language::integer:1)
+     |   |   |   `-(language::integer:2)
+     |   |   `-(language::eqeq_op)
+     |   |       +-(language::lesser_or_eq_op)
+     |   |       |   +-(language::integer:3)
+     |   |       |   `-(language::minus_op)
+     |   |       |       +-(language::multiply_op)
+     |   |       |       |   +-(language::integer:2)
+     |   |       |       |   `-(language::integer:4)
+     |   |       |       `-(language::integer:1)
      |   |       `-(language::integer:2)
-     |   `-(language::true_kw)
-     `-(language::unary_not)
-         `-(language::false_kw)
+     |   `-(language::and_op)
+     |       +-(language::xor_op)
+     |       |   +-(language::greater_or_eq_op)
+     |       |   |   +-(language::integer:2)
+     |       |   |   `-(language::divide_op)
+     |       |   |       +-(language::integer:1)
+     |       |   |       `-(language::integer:5)
+     |       |   `-(language::integer:7)
+     |       `-(language::integer:2)
+     `-(language::xor_op)
+         +-(language::greater_op)
+         |   +-(language::lesser_op)
+         |   |   +-(language::integer:2)
+         |   |   `-(language::integer:3)
+         |   `-(language::integer:7)
+         `-(language::minus_op)
+             +-(language::plus_op)
+             |   +-(language::unary_minus)
+             |   |   `-(language::integer:2)
+             |   `-(language::true_kw)
+             `-(language::unary_not)
+                 `-(language::false_kw)
 )";
         CHECK_AST(data, result);
       }
-- 
GitLab