@@ -2005,6 +2005,9 @@ auto statement_node::visit(auto& v, int depth)
20052005 -> void
20062006{
20072007 v.start (*this , depth);
2008+ if (parameters) {
2009+ parameters->visit (v, depth+1 );
2010+ }
20082011 try_visit<expression >(statement, v, depth);
20092012 try_visit<compound >(statement, v, depth);
20102013 try_visit<selection >(statement, v, depth);
@@ -2360,6 +2363,8 @@ auto to_string(accessibility a)
23602363}
23612364
23622365
2366+ struct declaration_identifier_tag { };
2367+
23632368struct declaration_node
23642369{
23652370 // The capture_group is declared first, because it should outlive
@@ -3193,9 +3198,11 @@ struct declaration_node
31933198 {
31943199 v.start (*this , depth);
31953200
3201+ v.start (declaration_identifier_tag{}, depth);
31963202 if (identifier) {
31973203 identifier->visit (v, depth+1 );
31983204 }
3205+ v.end (declaration_identifier_tag{}, depth);
31993206
32003207 try_visit<a_function >(type, v, depth+1 );
32013208 try_visit<an_object >(type, v, depth+1 );
@@ -3645,6 +3652,8 @@ auto primary_expression_node::visit(auto& v, int depth)
36453652}
36463653
36473654
3655+ struct next_expression_tag { };
3656+
36483657auto iteration_statement_node::visit (auto & v, int depth)
36493658 -> void
36503659{
@@ -3659,7 +3668,9 @@ auto iteration_statement_node::visit(auto& v, int depth)
36593668 statements->visit (v, depth+1 );
36603669 }
36613670 if (next_expression) {
3671+ v.start (next_expression_tag{}, depth);
36623672 next_expression->visit (v, depth+1 );
3673+ v.end (next_expression_tag{}, depth);
36633674 }
36643675 if (condition) {
36653676 assert (!range && !body);
@@ -3771,6 +3782,48 @@ struct translation_unit_node
37713782};
37723783
37733784
3785+ // -----------------------------------------------------------------------
3786+ //
3787+ // print(*_node): pretty-prints Cpp2 ASTs
3788+ //
3789+ // -----------------------------------------------------------------------
3790+ //
3791+ // auto print(primary_expression_node const&)
3792+ // -> std::string
3793+ // {
3794+ // auto ret = std::string{};
3795+ // return ret;
3796+ // }
3797+ // auto print(literal_node const&)
3798+ // auto print(prefix_expression_node const&)
3799+ // auto print(binary_expression_node const&)
3800+ // auto print(expression_node const&)
3801+ // auto print(expression_list_node const&)
3802+ // auto print(expression_statement_node const&)
3803+ // auto print(postfix_expression_node const&)
3804+ // auto print(unqualified_id_node const&)
3805+ // auto print(qualified_id_node const&)
3806+ // auto print(type_id_node const&)
3807+ // auto print(is_as_expression_node const&)
3808+ // auto print(id_expression_node const&)
3809+ // auto print(compound_statement_node const&)
3810+ // auto print(selection_statement_node const&)
3811+ // auto print(iteration_statement_node const&)
3812+ // auto print(return_statement_node const&)
3813+ // auto print(alternative_node const&)
3814+ // auto print(inspect_expression_node const&)
3815+ // auto print(contract_node const&)
3816+ // auto print(jump_statement_node const&)
3817+ // auto print(statement_node const&)
3818+ // auto print(parameter_declaration_node const&)
3819+ // auto print(parameter_declaration_list_node const&)
3820+ // auto print(function_type_node const&)
3821+ // auto print(type_node const&)
3822+ // auto print(namespace_node const&)
3823+ // auto print(alias_node const&)
3824+ // auto print(declaration_node const&)
3825+
3826+
37743827// -----------------------------------------------------------------------
37753828//
37763829// parser: parses a section of Cpp2 code
@@ -7589,6 +7642,16 @@ class parse_tree_printer : printing_visitor
75897642 o << pre (indent) << " template arguments\n " ;
75907643 }
75917644
7645+ auto start (declaration_identifier_tag const &, int indent) -> void
7646+ {
7647+ o << pre (indent) << " declaration identifier\n " ;
7648+ }
7649+
7650+ auto start (next_expression_tag const &, int indent) -> void
7651+ {
7652+ o << pre (indent) << " next expression\n " ;
7653+ }
7654+
75927655 auto start (alias_node const & n, int indent) -> void
75937656 {
75947657 o << pre (indent) << " alias\n " ;
0 commit comments