Skip to content
Snippets Groups Projects
Commit dd48fc5b authored by Stéphane Del Pino's avatar Stéphane Del Pino
Browse files

Fix issue #25 (simplification of unary expressions)

Also add a few related tests
parent 2e35b34d
No related branches found
No related tags found
1 merge request!118Fix issue #25 (simplification of unary expressions)
...@@ -74,7 +74,7 @@ struct ASTBuilder::simplify_unary : TAO_PEGTL_NAMESPACE::parse_tree::apply<ASTBu ...@@ -74,7 +74,7 @@ struct ASTBuilder::simplify_unary : TAO_PEGTL_NAMESPACE::parse_tree::apply<ASTBu
transform(n, st...); 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>()) { if (n->children[0]->is_type<language::unary_plus>()) {
n = std::move(n->children[1]); n = std::move(n->children[1]);
transform(n, st...); transform(n, st...);
......
...@@ -159,15 +159,30 @@ let s:string; s = "foo"; ...@@ -159,15 +159,30 @@ let s:string; s = "foo";
SECTION("parented expression") SECTION("parented expression")
{ {
std::string_view data = R"( std::string_view data = R"(
(2+3)*6; (-2)*6;
(-2+3)*6;
(-2+3+5)*6;
)"; )";
std::string_view result = R"( std::string_view result = R"(
(root) (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::multiply_op)
+-(language::plus_op) +-(language::plus_op)
| +-(language::integer:2) | +-(language::plus_op)
| `-(language::integer:3) | | +-(language::unary_minus)
| | | `-(language::integer:2)
| | `-(language::integer:3)
| `-(language::integer:5)
`-(language::integer:6) `-(language::integer:6)
)"; )";
CHECK_AST(data, result); CHECK_AST(data, result);
......
...@@ -184,7 +184,7 @@ TEST_CASE("BinaryExpressionProcessor arithmetic", "[language]") ...@@ -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 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 = 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 z:Z, z = 1 + 2;)", "z", 3l);
CHECK_BINARY_EXPRESSION_RESULT(R"(let x:R, x = 3 + 2.5;)", "x", 5.5); CHECK_BINARY_EXPRESSION_RESULT(R"(let x:R, x = 3 + 2.5;)", "x", 5.5);
} }
...@@ -192,7 +192,7 @@ TEST_CASE("BinaryExpressionProcessor arithmetic", "[language]") ...@@ -192,7 +192,7 @@ TEST_CASE("BinaryExpressionProcessor arithmetic", "[language]")
SECTION("lhs is R") 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 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 + 1;)", "r", (-1.2 + 1));
CHECK_BINARY_EXPRESSION_RESULT(R"(let r:R, r = -1.2 + 2.3;)", "r", (-1.2 + 2.3)); 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]") ...@@ -219,7 +219,7 @@ TEST_CASE("BinaryExpressionProcessor arithmetic", "[language]")
SECTION("lhs is Z") SECTION("lhs is Z")
{ {
CHECK_BINARY_EXPRESSION_RESULT(R"(let z:Z, z = -1 - true;)", "z", -2l); 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 z:Z, z = 7 - 2;)", "z", 5l);
CHECK_BINARY_EXPRESSION_RESULT(R"(let x:R, x = 4 - 2.5;)", "x", 1.5); CHECK_BINARY_EXPRESSION_RESULT(R"(let x:R, x = 4 - 2.5;)", "x", 1.5);
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment