From f2bb8697d6531b7ce1d9ad7846e9b6362012bf92 Mon Sep 17 00:00:00 2001 From: Stephane Del Pino <stephane.delpino44@gmail.com> Date: Mon, 21 Oct 2019 12:31:31 +0200 Subject: [PATCH] Add simplification of language::expression_list If a `language::expression_list` contains only one `language::expression`, it is replaced by the `language::expression` itself during AST simplification. --- src/language/ASTBuilder.cpp | 18 +++++++++++++++++- src/language/ASTBuilder.hpp | 1 + 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/language/ASTBuilder.cpp b/src/language/ASTBuilder.cpp index 0583dcffd..8cbd519d1 100644 --- a/src/language/ASTBuilder.cpp +++ b/src/language/ASTBuilder.cpp @@ -139,6 +139,22 @@ struct ASTBuilder::simplify_name_list : parse_tree::apply<ASTBuilder::simplify_n } }; +struct ASTBuilder::simplify_expression_list : parse_tree::apply<ASTBuilder::simplify_expression_list> +{ + template <typename... States> + static void + transform(std::unique_ptr<ASTNode>& n, States&&... st) + { + if (n->is_type<language::expression_list>()) { + if (n->children.size() == 1) { + n->remove_content(); + n = std::move(n->children.back()); + transform(n, st...); + } + } + } +}; + struct ASTBuilder::simplify_statement_block : parse_tree::apply<ASTBuilder::simplify_statement_block> { template <typename... States> @@ -238,7 +254,6 @@ using selector = parse_tree::selector< real, literal, name, - expression_list, B_set, N_set, Z_set, @@ -286,6 +301,7 @@ using selector = parse_tree::selector< ASTBuilder::simplify_for_statement_block::on<for_statement_block>, parse_tree::discard_empty::on<ignored, semicol, block>, ASTBuilder::simplify_name_list::on<name_list>, + ASTBuilder::simplify_expression_list::on<expression_list>, ASTBuilder::simplify_statement_block::on<statement_block>, ASTBuilder::simplify_for_init::on<for_init>, ASTBuilder::simplify_for_test::on<for_test>, diff --git a/src/language/ASTBuilder.hpp b/src/language/ASTBuilder.hpp index 703f46bc1..bae52ea95 100644 --- a/src/language/ASTBuilder.hpp +++ b/src/language/ASTBuilder.hpp @@ -10,6 +10,7 @@ struct ASTBuilder struct rearrange; struct simplify_unary; struct simplify_name_list; + struct simplify_expression_list; struct simplify_statement_block; struct simplify_for_statement_block; struct simplify_for_init; -- GitLab