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

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.
parent 0bdc93d9
No related branches found
No related tags found
1 merge request!37Feature/language
...@@ -139,6 +139,22 @@ struct ASTBuilder::simplify_name_list : parse_tree::apply<ASTBuilder::simplify_n ...@@ -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> struct ASTBuilder::simplify_statement_block : parse_tree::apply<ASTBuilder::simplify_statement_block>
{ {
template <typename... States> template <typename... States>
...@@ -238,7 +254,6 @@ using selector = parse_tree::selector< ...@@ -238,7 +254,6 @@ using selector = parse_tree::selector<
real, real,
literal, literal,
name, name,
expression_list,
B_set, B_set,
N_set, N_set,
Z_set, Z_set,
...@@ -286,6 +301,7 @@ using selector = parse_tree::selector< ...@@ -286,6 +301,7 @@ using selector = parse_tree::selector<
ASTBuilder::simplify_for_statement_block::on<for_statement_block>, ASTBuilder::simplify_for_statement_block::on<for_statement_block>,
parse_tree::discard_empty::on<ignored, semicol, block>, parse_tree::discard_empty::on<ignored, semicol, block>,
ASTBuilder::simplify_name_list::on<name_list>, ASTBuilder::simplify_name_list::on<name_list>,
ASTBuilder::simplify_expression_list::on<expression_list>,
ASTBuilder::simplify_statement_block::on<statement_block>, ASTBuilder::simplify_statement_block::on<statement_block>,
ASTBuilder::simplify_for_init::on<for_init>, ASTBuilder::simplify_for_init::on<for_init>,
ASTBuilder::simplify_for_test::on<for_test>, ASTBuilder::simplify_for_test::on<for_test>,
......
...@@ -10,6 +10,7 @@ struct ASTBuilder ...@@ -10,6 +10,7 @@ struct ASTBuilder
struct rearrange; struct rearrange;
struct simplify_unary; struct simplify_unary;
struct simplify_name_list; struct simplify_name_list;
struct simplify_expression_list;
struct simplify_statement_block; struct simplify_statement_block;
struct simplify_for_statement_block; struct simplify_for_statement_block;
struct simplify_for_init; struct simplify_for_init;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment