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