diff options
author | Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com> | 2023-11-07 11:37:39 +0100 |
---|---|---|
committer | Arthur Cohen <arthur.cohen@embecosm.com> | 2024-01-16 19:13:14 +0100 |
commit | 32f16cac2d373892129585e048fdc861d0dface9 (patch) | |
tree | 5d8760266d73e25d2e848c08b013ae2e11cc692e | |
parent | 513b0154ab1f00e92d2072a5858f585510599b9b (diff) | |
download | gcc-32f16cac2d373892129585e048fdc861d0dface9.zip gcc-32f16cac2d373892129585e048fdc861d0dface9.tar.gz gcc-32f16cac2d373892129585e048fdc861d0dface9.tar.bz2 |
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 <pierre-emmanuel.patry@embecosm.com>
-rw-r--r-- | gcc/rust/ast/rust-ast-collector.cc | 70 | ||||
-rw-r--r-- | 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 05c9630..cb8dfd8 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 <typename T> -void -TokenCollector::visit (T &node) -{ - node.accept_vis (*this); -} - -template <typename T> -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 <typename T> -void -TokenCollector::visit_as_line (T &item, std::vector<TokenPtr> trailing) -{ - indentation (); - visit (item); - for (auto &token : trailing) - push (token); - newline (); -} - -template <typename T> -void -TokenCollector::visit_items_as_lines (T &collection, - std::vector<TokenPtr> trailing) -{ - for (auto &item : collection) - visit_as_line (item, trailing); -} - -template <typename T> -void -TokenCollector::visit_items_as_block (T &collection, - std::vector<TokenPtr> 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 20ffd8e..55c13d1 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 <typename T> - void visit_as_line (T &item, std::vector<TokenPtr> trailing = {}); + void visit_as_line (T &item, std::vector<TokenPtr> 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 <typename T> - void visit_items_as_lines (T &collection, - std::vector<TokenPtr> trailing = {}); + void visit_items_as_lines (T &collection, std::vector<TokenPtr> 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 <typename T> void visit_items_as_block (T &collection, std::vector<TokenPtr> 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<std::unique_ptr<T>> */ - template <typename T> void visit (T &node); + template <typename T> void visit (T &node) { node.accept_vis (*this); } void visit (Visitable &v); void visit (LoopLabel &label); |