https://gcc.gnu.org/g:20262dae7f8de0c4dcd94af14b0ed3500dd19bcf

commit 20262dae7f8de0c4dcd94af14b0ed3500dd19bcf
Author: Pierre-Emmanuel Patry <pierre-emmanuel.pa...@embecosm.com>
Date:   Tue Nov 7 11:37:39 2023 +0100

    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.pa...@embecosm.com>

Diff:
---
 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 05c9630bf523..cb8dfd800162 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 20ffd8e65abf..55c13d103d05 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);

Reply via email to