]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gccrs: Move SingleASTNode implementation out of header
authorPierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Thu, 2 Nov 2023 17:23:03 +0000 (18:23 +0100)
committerArthur Cohen <arthur.cohen@embecosm.com>
Tue, 16 Jan 2024 18:09:36 +0000 (19:09 +0100)
Those functions implementation put additional constraints on the headers
which makes the codebase harder to work with.

gcc/rust/ChangeLog:

* ast/rust-ast.h: Move implementation from here...
* ast/rust-ast.cc (SingleASTNode::SingleASTNode): ...to here.
(SingleASTNode::operator=): ...and here...
(SingleASTNode::accept_vis): ...and here...
(SingleASTNode::is_error): ...and here...
(SingleASTNode::as_string): ...also here.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
gcc/rust/ast/rust-ast.cc
gcc/rust/ast/rust-ast.h

index 5d875fd4504975a7b574b65de92aab2e93001723..d9c493debe6e69adc102c03e3237b9d07f55a2a6 100644 (file)
@@ -17,6 +17,7 @@ You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#include "rust-ast.h"
 #include "rust-system.h"
 #include "rust-ast-full.h"
 #include "rust-diagnostics.h"
@@ -37,6 +38,179 @@ along with GCC; see the file COPYING3.  If not see
 namespace Rust {
 namespace AST {
 
+SingleASTNode::SingleASTNode (SingleASTNode const &other)
+{
+  kind = other.kind;
+  switch (kind)
+    {
+    case EXPRESSION:
+      expr = other.expr->clone_expr ();
+      break;
+
+    case ITEM:
+      item = other.item->clone_item ();
+      break;
+
+    case STMT:
+      stmt = other.stmt->clone_stmt ();
+      break;
+
+    case EXTERN:
+      external_item = other.external_item->clone_external_item ();
+      break;
+
+    case TRAIT:
+      trait_item = other.trait_item->clone_trait_item ();
+      break;
+
+    case IMPL:
+      impl_item = other.impl_item->clone_inherent_impl_item ();
+      break;
+
+    case TRAIT_IMPL:
+      trait_impl_item = other.trait_impl_item->clone_trait_impl_item ();
+      break;
+
+    case TYPE:
+      type = other.type->clone_type ();
+      break;
+    }
+}
+
+SingleASTNode
+SingleASTNode::operator= (SingleASTNode const &other)
+{
+  kind = other.kind;
+  switch (kind)
+    {
+    case EXPRESSION:
+      expr = other.expr->clone_expr ();
+      break;
+
+    case ITEM:
+      item = other.item->clone_item ();
+      break;
+
+    case STMT:
+      stmt = other.stmt->clone_stmt ();
+      break;
+
+    case EXTERN:
+      external_item = other.external_item->clone_external_item ();
+      break;
+
+    case TRAIT:
+      trait_item = other.trait_item->clone_trait_item ();
+      break;
+
+    case IMPL:
+      impl_item = other.impl_item->clone_inherent_impl_item ();
+      break;
+
+    case TRAIT_IMPL:
+      trait_impl_item = other.trait_impl_item->clone_trait_impl_item ();
+      break;
+
+    case TYPE:
+      type = other.type->clone_type ();
+      break;
+    }
+  return *this;
+}
+
+void
+SingleASTNode::accept_vis (ASTVisitor &vis)
+{
+  switch (kind)
+    {
+    case EXPRESSION:
+      expr->accept_vis (vis);
+      break;
+
+    case ITEM:
+      item->accept_vis (vis);
+      break;
+
+    case STMT:
+      stmt->accept_vis (vis);
+      break;
+
+    case EXTERN:
+      external_item->accept_vis (vis);
+      break;
+
+    case TRAIT:
+      trait_item->accept_vis (vis);
+      break;
+
+    case IMPL:
+      impl_item->accept_vis (vis);
+      break;
+
+    case TRAIT_IMPL:
+      trait_impl_item->accept_vis (vis);
+      break;
+
+    case TYPE:
+      type->accept_vis (vis);
+      break;
+    }
+}
+
+bool
+SingleASTNode::is_error ()
+{
+  switch (kind)
+    {
+    case EXPRESSION:
+      return expr == nullptr;
+    case ITEM:
+      return item == nullptr;
+    case STMT:
+      return stmt == nullptr;
+    case EXTERN:
+      return external_item == nullptr;
+    case TRAIT:
+      return trait_item == nullptr;
+    case IMPL:
+      return impl_item == nullptr;
+    case TRAIT_IMPL:
+      return trait_impl_item == nullptr;
+    case TYPE:
+      return type == nullptr;
+    }
+
+  rust_unreachable ();
+  return true;
+}
+
+std::string
+SingleASTNode::as_string () const
+{
+  switch (kind)
+    {
+    case EXPRESSION:
+      return "Expr: " + expr->as_string ();
+    case ITEM:
+      return "Item: " + item->as_string ();
+    case STMT:
+      return "Stmt: " + stmt->as_string ();
+    case EXTERN:
+      return "External Item: " + external_item->as_string ();
+    case TRAIT:
+      return "Trait Item: " + trait_item->as_string ();
+    case IMPL:
+      return "Impl Item: " + impl_item->as_string ();
+    case TRAIT_IMPL:
+      return "Trait Impl Item: " + trait_impl_item->as_string ();
+    case TYPE:
+      return "Type: " + type->as_string ();
+    }
+
+  rust_unreachable ();
+  return "";
+}
+
 std::string
 Crate::as_string () const
 {
index 75af2940c766f4c5310bed5e6868648e6423fde4..c4dbd7ef42491569ba2bdd045ca26e56be07be3f 100644 (file)
@@ -1708,84 +1708,9 @@ public:
     : kind (TYPE), type (std::move (type))
   {}
 
-  SingleASTNode (SingleASTNode const &other)
-  {
-    kind = other.kind;
-    switch (kind)
-      {
-      case EXPRESSION:
-       expr = other.expr->clone_expr ();
-       break;
-
-      case ITEM:
-       item = other.item->clone_item ();
-       break;
-
-      case STMT:
-       stmt = other.stmt->clone_stmt ();
-       break;
-
-      case EXTERN:
-       external_item = other.external_item->clone_external_item ();
-       break;
-
-      case TRAIT:
-       trait_item = other.trait_item->clone_trait_item ();
-       break;
+  SingleASTNode (SingleASTNode const &other);
 
-      case IMPL:
-       impl_item = other.impl_item->clone_inherent_impl_item ();
-       break;
-
-      case TRAIT_IMPL:
-       trait_impl_item = other.trait_impl_item->clone_trait_impl_item ();
-       break;
-
-      case TYPE:
-       type = other.type->clone_type ();
-       break;
-      }
-  }
-
-  SingleASTNode operator= (SingleASTNode const &other)
-  {
-    kind = other.kind;
-    switch (kind)
-      {
-      case EXPRESSION:
-       expr = other.expr->clone_expr ();
-       break;
-
-      case ITEM:
-       item = other.item->clone_item ();
-       break;
-
-      case STMT:
-       stmt = other.stmt->clone_stmt ();
-       break;
-
-      case EXTERN:
-       external_item = other.external_item->clone_external_item ();
-       break;
-
-      case TRAIT:
-       trait_item = other.trait_item->clone_trait_item ();
-       break;
-
-      case IMPL:
-       impl_item = other.impl_item->clone_inherent_impl_item ();
-       break;
-
-      case TRAIT_IMPL:
-       trait_impl_item = other.trait_impl_item->clone_trait_impl_item ();
-       break;
-
-      case TYPE:
-       type = other.type->clone_type ();
-       break;
-      }
-    return *this;
-  }
+  SingleASTNode operator= (SingleASTNode const &other);
 
   SingleASTNode (SingleASTNode &&other) = default;
   SingleASTNode &operator= (SingleASTNode &&other) = default;
@@ -1863,95 +1788,11 @@ public:
     return std::move (type);
   }
 
-  void accept_vis (ASTVisitor &vis) override
-  {
-    switch (kind)
-      {
-      case EXPRESSION:
-       expr->accept_vis (vis);
-       break;
-
-      case ITEM:
-       item->accept_vis (vis);
-       break;
-
-      case STMT:
-       stmt->accept_vis (vis);
-       break;
-
-      case EXTERN:
-       external_item->accept_vis (vis);
-       break;
-
-      case TRAIT:
-       trait_item->accept_vis (vis);
-       break;
-
-      case IMPL:
-       impl_item->accept_vis (vis);
-       break;
-
-      case TRAIT_IMPL:
-       trait_impl_item->accept_vis (vis);
-       break;
-
-      case TYPE:
-       type->accept_vis (vis);
-       break;
-      }
-  }
-
-  bool is_error ()
-  {
-    switch (kind)
-      {
-      case EXPRESSION:
-       return expr == nullptr;
-      case ITEM:
-       return item == nullptr;
-      case STMT:
-       return stmt == nullptr;
-      case EXTERN:
-       return external_item == nullptr;
-      case TRAIT:
-       return trait_item == nullptr;
-      case IMPL:
-       return impl_item == nullptr;
-      case TRAIT_IMPL:
-       return trait_impl_item == nullptr;
-      case TYPE:
-       return type == nullptr;
-      }
+  void accept_vis (ASTVisitor &vis) override;
 
-    rust_unreachable ();
-    return true;
-  }
+  bool is_error ();
 
-  std::string as_string () const
-  {
-    switch (kind)
-      {
-      case EXPRESSION:
-       return "Expr: " + expr->as_string ();
-      case ITEM:
-       return "Item: " + item->as_string ();
-      case STMT:
-       return "Stmt: " + stmt->as_string ();
-      case EXTERN:
-       return "External Item: " + external_item->as_string ();
-      case TRAIT:
-       return "Trait Item: " + trait_item->as_string ();
-      case IMPL:
-       return "Impl Item: " + impl_item->as_string ();
-      case TRAIT_IMPL:
-       return "Trait Impl Item: " + trait_impl_item->as_string ();
-      case TYPE:
-       return "Type: " + type->as_string ();
-      }
-
-    rust_unreachable ();
-    return "";
-  }
+  std::string as_string () const;
 };
 
 // A crate AST object - holds all the data for a single compilation unit