]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gccrs: Remove class AST::InherentImplItem
authorOwen Avery <powerboat9.gamer@gmail.com>
Tue, 28 Nov 2023 06:07:00 +0000 (01:07 -0500)
committerArthur Cohen <arthur.cohen@embecosm.com>
Tue, 30 Jan 2024 11:36:47 +0000 (12:36 +0100)
gcc/rust/ChangeLog:

* ast/rust-ast-full-decls.h
(class InherentImplItem): Remove.
* ast/rust-ast.h
(class InherentImplItem): Remove.
(class SingleASTNode):
Store pointer to AssociatedItem instead of InherentImplItem.

* ast/rust-ast.cc
(SingleASTNode::SingleASTNode):
Use clone_associated_item instead of clone_inherent_impl_item.
(SingleASTNode::operator=): Likewise.

* ast/rust-item.h
(class InherentImpl):
Use AssociatedItem rather than InherentImplItem.
(class Function): Likewise.
(class ConstantItem): Likewise.
* ast/rust-macro.h
(class MacroInvocation): Likewise.
* expand/rust-expand-visitor.cc
(ExpandVisitor::visit): Likewise.
* parse/rust-parse-impl.h
(Parser::parse_impl): Likewise.
(Parser::parse_inherent_impl_item): Likewise.
(Parser::parse_inherent_impl_function_or_method): Likewise.
* parse/rust-parse.h
(Parser::parse_inherent_impl_item): Likewise.
(Parser::parse_inherent_impl_function_or_method): Likewise.

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
gcc/rust/ast/rust-ast-full-decls.h
gcc/rust/ast/rust-ast.cc
gcc/rust/ast/rust-ast.h
gcc/rust/ast/rust-item.h
gcc/rust/ast/rust-macro.h
gcc/rust/expand/rust-expand-visitor.cc
gcc/rust/parse/rust-parse-impl.h
gcc/rust/parse/rust-parse.h

index e2d05bae0c4be55343b511569a9c24ce00e55925..5bfaaa8ba3c9deff4720f649114a6574d6676b5a 100644 (file)
@@ -52,7 +52,6 @@ class GenericParam;
 class LifetimeParam;
 class ConstGenericParam;
 class TraitItem;
-class InherentImplItem;
 class TraitImplItem;
 struct Crate;
 class PathExpr;
index 43820d38e283a70c8d582ecbf3d82c1f784ac0f3..17f82d67430463bedf83495b325abd9281668bd2 100644 (file)
@@ -64,7 +64,7 @@ SingleASTNode::SingleASTNode (SingleASTNode const &other)
       break;
 
     case IMPL:
-      impl_item = other.impl_item->clone_inherent_impl_item ();
+      impl_item = other.impl_item->clone_associated_item ();
       break;
 
     case TRAIT_IMPL:
@@ -104,7 +104,7 @@ SingleASTNode::operator= (SingleASTNode const &other)
       break;
 
     case IMPL:
-      impl_item = other.impl_item->clone_inherent_impl_item ();
+      impl_item = other.impl_item->clone_associated_item ();
       break;
 
     case TRAIT_IMPL:
index 4049e4d26078c24a2f4fc7fb3cc717bd1182d4bf..b193c67c69e523b826219471d5237a5b6a151a27 100644 (file)
@@ -1687,22 +1687,6 @@ public:
   location_t get_locus () const override { return locus; }
 };
 
-/* Abstract base class for items used within an inherent impl block (the impl
- * name {} one) */
-class InherentImplItem : virtual public AssociatedItem
-{
-protected:
-  // Clone function implementation as pure virtual method
-  virtual InherentImplItem *clone_associated_item_impl () const override = 0;
-
-public:
-  // Unique pointer custom clone function
-  std::unique_ptr<InherentImplItem> clone_inherent_impl_item () const
-  {
-    return std::unique_ptr<InherentImplItem> (clone_associated_item_impl ());
-  }
-};
-
 // Abstract base class for items used in a trait impl
 class TraitImplItem : virtual public AssociatedItem
 {
@@ -1860,7 +1844,7 @@ private:
   std::unique_ptr<Stmt> stmt;
   std::unique_ptr<ExternalItem> external_item;
   std::unique_ptr<TraitItem> trait_item;
-  std::unique_ptr<InherentImplItem> impl_item;
+  std::unique_ptr<AssociatedItem> impl_item;
   std::unique_ptr<TraitImplItem> trait_impl_item;
   std::unique_ptr<Type> type;
 
@@ -1885,7 +1869,7 @@ public:
     : kind (TRAIT), trait_item (std::move (item))
   {}
 
-  SingleASTNode (std::unique_ptr<InherentImplItem> item)
+  SingleASTNode (std::unique_ptr<AssociatedItem> item)
     : kind (IMPL), impl_item (std::move (item))
   {}
 
@@ -1959,7 +1943,7 @@ public:
     return std::move (external_item);
   }
 
-  std::unique_ptr<InherentImplItem> take_impl_item ()
+  std::unique_ptr<AssociatedItem> take_impl_item ()
   {
     rust_assert (!is_error ());
     return std::move (impl_item);
index 3bf023b3c5a7f60548d05ddb2badfda2368b9d5a..b34aca0d56cb819bada94b23aa3e55a9e83c9d50 100644 (file)
@@ -1285,7 +1285,9 @@ protected:
 class LetStmt;
 
 // Rust function declaration AST node
-class Function : public VisItem, public InherentImplItem, public TraitImplItem
+class Function : public VisItem,
+                virtual public AssociatedItem,
+                public TraitImplItem
 {
   FunctionQualifiers qualifiers;
   Identifier function_name;
@@ -2308,7 +2310,7 @@ protected:
 /* "Constant item" AST node - used for constant, compile-time expressions
  * within module scope (like constexpr) */
 class ConstantItem : public VisItem,
-                    public InherentImplItem,
+                    virtual public AssociatedItem,
                     public TraitImplItem
 {
   // either has an identifier or "_" - maybe handle in identifier?
@@ -3408,7 +3410,7 @@ protected:
 class InherentImpl : public Impl
 {
   // bool has_impl_items;
-  std::vector<std::unique_ptr<InherentImplItem>> impl_items;
+  std::vector<std::unique_ptr<AssociatedItem>> impl_items;
 
 public:
   std::string as_string () const override;
@@ -3417,7 +3419,7 @@ public:
   bool has_impl_items () const { return !impl_items.empty (); }
 
   // Mega-constructor
-  InherentImpl (std::vector<std::unique_ptr<InherentImplItem>> impl_items,
+  InherentImpl (std::vector<std::unique_ptr<AssociatedItem>> impl_items,
                std::vector<std::unique_ptr<GenericParam>> generic_params,
                std::unique_ptr<Type> trait_type, WhereClause where_clause,
                Visibility vis, std::vector<Attribute> inner_attrs,
@@ -3433,7 +3435,7 @@ public:
   {
     impl_items.reserve (other.impl_items.size ());
     for (const auto &e : other.impl_items)
-      impl_items.push_back (e->clone_inherent_impl_item ());
+      impl_items.push_back (e->clone_associated_item ());
   }
 
   // Overloaded assignment operator with vector clone
@@ -3443,7 +3445,7 @@ public:
 
     impl_items.reserve (other.impl_items.size ());
     for (const auto &e : other.impl_items)
-      impl_items.push_back (e->clone_inherent_impl_item ());
+      impl_items.push_back (e->clone_associated_item ());
 
     return *this;
   }
@@ -3455,11 +3457,11 @@ public:
   void accept_vis (ASTVisitor &vis) override;
 
   // TODO: think of better way to do this
-  const std::vector<std::unique_ptr<InherentImplItem>> &get_impl_items () const
+  const std::vector<std::unique_ptr<AssociatedItem>> &get_impl_items () const
   {
     return impl_items;
   }
-  std::vector<std::unique_ptr<InherentImplItem>> &get_impl_items ()
+  std::vector<std::unique_ptr<AssociatedItem>> &get_impl_items ()
   {
     return impl_items;
   }
index b3fdcf71417d7dc69e0d8e79be43dff939154936..41c21cffa95d5b2482d45dbf3abf30fb84cfa2a3 100644 (file)
@@ -599,7 +599,7 @@ class MacroInvocation : public TypeNoBounds,
                        public Item,
                        public TraitItem,
                        public TraitImplItem,
-                       public InherentImplItem,
+                       virtual public AssociatedItem,
                        public ExternalItem,
                        public ExprWithoutBlock
 {
index 3f598b7f21ce224e25d15ae771f033837c16cc5b..1745af061746a32a91858875e09a020a11f432ae 100644 (file)
@@ -1180,7 +1180,7 @@ ExpandVisitor::visit (AST::InherentImpl &impl)
   if (impl.has_where_clause ())
     expand_where_clause (impl.get_where_clause ());
 
-  std::function<std::unique_ptr<AST::InherentImplItem> (AST::SingleASTNode)>
+  std::function<std::unique_ptr<AST::AssociatedItem> (AST::SingleASTNode)>
     extractor = [] (AST::SingleASTNode node) { return node.take_impl_item (); };
 
   expand_macro_children (MacroExpander::ContextType::IMPL,
index f83cc122c893ab4fb873a73e30e0e60420b4d3c8..a9af7dc3f3894cf12041e3411ba2bc991b8829a5 100644 (file)
@@ -5388,12 +5388,12 @@ Parser<ManagedTokenSource>::parse_impl (AST::Visibility vis,
       AST::AttrVec inner_attrs = parse_inner_attributes ();
 
       // parse inherent impl items
-      std::vector<std::unique_ptr<AST::InherentImplItem>> impl_items;
+      std::vector<std::unique_ptr<AST::AssociatedItem>> impl_items;
 
       const_TokenPtr t = lexer.peek_token ();
       while (t->get_id () != RIGHT_CURLY)
        {
-         std::unique_ptr<AST::InherentImplItem> impl_item
+         std::unique_ptr<AST::AssociatedItem> impl_item
            = parse_inherent_impl_item ();
 
          if (impl_item == nullptr)
@@ -5512,7 +5512,7 @@ Parser<ManagedTokenSource>::parse_impl (AST::Visibility vis,
 
 // Parses a single inherent impl item (item inside an inherent impl block).
 template <typename ManagedTokenSource>
-std::unique_ptr<AST::InherentImplItem>
+std::unique_ptr<AST::AssociatedItem>
 Parser<ManagedTokenSource>::parse_inherent_impl_item ()
 {
   // parse outer attributes (if they exist)
@@ -5629,7 +5629,7 @@ Parser<ManagedTokenSource>::parse_inherent_impl_item ()
 // InherentImplItem is this specialisation of the template while TraitImplItem
 // will be the other.
 template <typename ManagedTokenSource>
-std::unique_ptr<AST::InherentImplItem>
+std::unique_ptr<AST::AssociatedItem>
 Parser<ManagedTokenSource>::parse_inherent_impl_function_or_method (
   AST::Visibility vis, AST::AttrVec outer_attrs)
 {
index d3718467b4890075cd2d6346de23d5bfea411b67..4291e4198a5fb8c439954f0fb8a8944df7d1b41d 100644 (file)
@@ -170,7 +170,7 @@ public:
   std::unique_ptr<AST::Type> parse_type (bool save_errors = true);
   std::unique_ptr<AST::ExternalItem> parse_external_item ();
   std::unique_ptr<AST::TraitItem> parse_trait_item ();
-  std::unique_ptr<AST::InherentImplItem> parse_inherent_impl_item ();
+  std::unique_ptr<AST::AssociatedItem> parse_inherent_impl_item ();
   std::unique_ptr<AST::TraitImplItem> parse_trait_impl_item ();
   AST::PathInExpression parse_path_in_expression ();
   std::vector<std::unique_ptr<AST::LifetimeParam>> parse_lifetime_params ();
@@ -348,7 +348,7 @@ private:
 
   std::unique_ptr<AST::Impl> parse_impl (AST::Visibility vis,
                                         AST::AttrVec outer_attrs);
-  std::unique_ptr<AST::InherentImplItem>
+  std::unique_ptr<AST::AssociatedItem>
   parse_inherent_impl_function_or_method (AST::Visibility vis,
                                          AST::AttrVec outer_attrs);
   std::unique_ptr<AST::TraitImplItem>