From 32f16cac2d373892129585e048fdc861d0dface9 Mon Sep 17 00:00:00 2001 From: Pierre-Emmanuel Patry Date: Tue, 7 Nov 2023 11:37:39 +0100 Subject: [PATCH] gccrs: Move templated functions to header file Templated functions shall remain in header files to stay in line with the rest of the codebase. gcc/rust/ChangeLog: * ast/rust-ast-collector.cc (TokenCollector::visit): Move to header file. (TokenCollector::visit_items_joined_by_separator): Likewise. (TokenCollector::visit_as_line): Likewise. (TokenCollector::visit_items_as_lines): Likewise. (TokenCollector::visit_items_as_block): Likewise. * ast/rust-ast-collector.h: Add implementation. Signed-off-by: Pierre-Emmanuel Patry --- gcc/rust/ast/rust-ast-collector.cc | 70 ------------------------------ gcc/rust/ast/rust-ast-collector.h | 52 +++++++++++++++++++--- 2 files changed, 46 insertions(+), 76 deletions(-) diff --git a/gcc/rust/ast/rust-ast-collector.cc b/gcc/rust/ast/rust-ast-collector.cc index 05c9630bf52..cb8dfd80016 100644 --- a/gcc/rust/ast/rust-ast-collector.cc +++ b/gcc/rust/ast/rust-ast-collector.cc @@ -54,76 +54,6 @@ TokenCollector::visit (AST::Item &item) item.accept_vis (*this); } -template -void -TokenCollector::visit (T &node) -{ - node.accept_vis (*this); -} - -template -void -TokenCollector::visit_items_joined_by_separator (T &collection, - TokenId separator, - size_t start_offset, - size_t end_offset) -{ - if (collection.size () > start_offset) - { - visit (collection.at (start_offset)); - auto size = collection.size () - end_offset; - for (size_t i = start_offset + 1; i < size; i++) - { - push (Rust::Token::make (separator, UNDEF_LOCATION)); - visit (collection.at (i)); - } - } -} - -template -void -TokenCollector::visit_as_line (T &item, std::vector trailing) -{ - indentation (); - visit (item); - for (auto &token : trailing) - push (token); - newline (); -} - -template -void -TokenCollector::visit_items_as_lines (T &collection, - std::vector trailing) -{ - for (auto &item : collection) - visit_as_line (item, trailing); -} - -template -void -TokenCollector::visit_items_as_block (T &collection, - std::vector trailing, - TokenId left_brace, TokenId right_brace) -{ - push (Rust::Token::make (left_brace, UNDEF_LOCATION)); - if (collection.empty ()) - { - push (Rust::Token::make (right_brace, UNDEF_LOCATION)); - newline (); - } - else - { - newline (); - increment_indentation (); - visit_items_as_lines (collection, trailing); - decrement_indentation (); - indentation (); - push (Rust::Token::make (right_brace, UNDEF_LOCATION)); - newline (); - } -} - void TokenCollector::trailing_comma () { diff --git a/gcc/rust/ast/rust-ast-collector.h b/gcc/rust/ast/rust-ast-collector.h index 20ffd8e65ab..55c13d103d0 100644 --- a/gcc/rust/ast/rust-ast-collector.h +++ b/gcc/rust/ast/rust-ast-collector.h @@ -97,13 +97,32 @@ private: void visit_items_joined_by_separator (T &collection, TokenId separator = COMMA, size_t start_offset = 0, - size_t end_offset = 0); + size_t end_offset = 0) + { + if (collection.size () > start_offset) + { + visit (collection.at (start_offset)); + auto size = collection.size () - end_offset; + for (size_t i = start_offset + 1; i < size; i++) + { + push (Rust::Token::make (separator, UNDEF_LOCATION)); + visit (collection.at (i)); + } + } + } /** * Visit item placing end of line after. */ template - void visit_as_line (T &item, std::vector trailing = {}); + void visit_as_line (T &item, std::vector trailing = {}) + { + indentation (); + visit (item); + for (auto &token : trailing) + push (token); + newline (); + } /** * Visit each item in @collection "as line". @@ -111,8 +130,11 @@ private: * @see visit_as_line */ template - void visit_items_as_lines (T &collection, - std::vector trailing = {}); + void visit_items_as_lines (T &collection, std::vector trailing = {}) + { + for (auto &item : collection) + visit_as_line (item, trailing); + } /** * Visit each item in @collection as lines inside a block delimited by braces @@ -122,7 +144,25 @@ private: template void visit_items_as_block (T &collection, std::vector trailing = {}, TokenId left_brace = LEFT_CURLY, - TokenId right_brace = RIGHT_CURLY); + TokenId right_brace = RIGHT_CURLY) + { + push (Rust::Token::make (left_brace, UNDEF_LOCATION)); + if (collection.empty ()) + { + push (Rust::Token::make (right_brace, UNDEF_LOCATION)); + newline (); + } + else + { + newline (); + increment_indentation (); + visit_items_as_lines (collection, trailing); + decrement_indentation (); + indentation (); + push (Rust::Token::make (right_brace, UNDEF_LOCATION)); + newline (); + } + } void trailing_comma (); void newline (); @@ -155,7 +195,7 @@ public: /** * @see visit> */ - template void visit (T &node); + template void visit (T &node) { node.accept_vis (*this); } void visit (Visitable &v); void visit (LoopLabel &label);