diff --git a/src/language/ast/ASTBuilder.cpp b/src/language/ast/ASTBuilder.cpp index a4dc8c822bab53a67be975b6444eb9dffa9bb6be..109ce527cffee1cc4aaa4221079894f8f0357338 100644 --- a/src/language/ast/ASTBuilder.cpp +++ b/src/language/ast/ASTBuilder.cpp @@ -74,7 +74,7 @@ struct ASTBuilder::simplify_unary : TAO_PEGTL_NAMESPACE::parse_tree::apply<ASTBu transform(n, st...); } } - } else if (n->children.size() == 2) { + } else if ((n->children.size() == 2) and (n->is_type<language::unary_expression>())) { if (n->children[0]->is_type<language::unary_plus>()) { n = std::move(n->children[1]); transform(n, st...); diff --git a/tests/test_ASTBuilder.cpp b/tests/test_ASTBuilder.cpp index 3ce2855eff1b059c0ac0e4215b8b1410e45af165..fdcf13315b9eb606f71f06d2cb1c2da399566a43 100644 --- a/tests/test_ASTBuilder.cpp +++ b/tests/test_ASTBuilder.cpp @@ -159,15 +159,30 @@ let s:string; s = "foo"; SECTION("parented expression") { std::string_view data = R"( -(2+3)*6; +(-2)*6; +(-2+3)*6; +(-2+3+5)*6; )"; std::string_view result = R"( (root) + +-(language::multiply_op) + | +-(language::unary_minus) + | | `-(language::integer:2) + | `-(language::integer:6) + +-(language::multiply_op) + | +-(language::plus_op) + | | +-(language::unary_minus) + | | | `-(language::integer:2) + | | `-(language::integer:3) + | `-(language::integer:6) `-(language::multiply_op) +-(language::plus_op) - | +-(language::integer:2) - | `-(language::integer:3) + | +-(language::plus_op) + | | +-(language::unary_minus) + | | | `-(language::integer:2) + | | `-(language::integer:3) + | `-(language::integer:5) `-(language::integer:6) )"; CHECK_AST(data, result); diff --git a/tests/test_BinaryExpressionProcessor_arithmetic.cpp b/tests/test_BinaryExpressionProcessor_arithmetic.cpp index 6ded2c991a25508ae89ce90fca602aad71901547..10699f3c06a24ba5b298ef2ac10984473c1e9e02 100644 --- a/tests/test_BinaryExpressionProcessor_arithmetic.cpp +++ b/tests/test_BinaryExpressionProcessor_arithmetic.cpp @@ -184,7 +184,7 @@ TEST_CASE("BinaryExpressionProcessor arithmetic", "[language]") { CHECK_BINARY_EXPRESSION_RESULT(R"(let z:Z, z = -1 + true;)", "z", 0l); CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 4; let z:Z, z = -3 + n;)", "z", 1l); - CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 2; let z:Z, z = -3 + n;)", "z", -1l); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 2; let z:Z, z = (-3 + n);)", "z", -1l); CHECK_BINARY_EXPRESSION_RESULT(R"(let z:Z, z = 1 + 2;)", "z", 3l); CHECK_BINARY_EXPRESSION_RESULT(R"(let x:R, x = 3 + 2.5;)", "x", 5.5); } @@ -192,7 +192,7 @@ TEST_CASE("BinaryExpressionProcessor arithmetic", "[language]") SECTION("lhs is R") { CHECK_BINARY_EXPRESSION_RESULT(R"(let r:R, r = -1.2 + true;)", "r", (-1.2 + true)); - CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 2; let r:R, r = -1.2 + n;)", "r", (-1.2 + uint64_t{2})); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 2; let r:R, r = (-1.2 + n);)", "r", (-1.2 + uint64_t{2})); CHECK_BINARY_EXPRESSION_RESULT(R"(let r:R, r = -1.2 + 1;)", "r", (-1.2 + 1)); CHECK_BINARY_EXPRESSION_RESULT(R"(let r:R, r = -1.2 + 2.3;)", "r", (-1.2 + 2.3)); } @@ -219,7 +219,7 @@ TEST_CASE("BinaryExpressionProcessor arithmetic", "[language]") SECTION("lhs is Z") { CHECK_BINARY_EXPRESSION_RESULT(R"(let z:Z, z = -1 - true;)", "z", -2l); - CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 4; let z:Z, z = 3 - n;)", "z", -1l); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 4; let z:Z, z = (-3 - n + 6);)", "z", -1l); CHECK_BINARY_EXPRESSION_RESULT(R"(let z:Z, z = 7 - 2;)", "z", 5l); CHECK_BINARY_EXPRESSION_RESULT(R"(let x:R, x = 4 - 2.5;)", "x", 1.5); }