From: Yap Zhi Heng <[email protected]>

Patterns include TuplePattern, TupleStructPattern & SlicePattern. Besides 
making their pattern
items container class inherit from a common `PatternItems` base class just like 
in HIR for
better standardization, mentions of `Range` are also changed to `HasRest` or 
`NoRest`.

gcc/rust/ChangeLog:

        * ast/rust-pattern.h:
                - Add a new base abstract class `PatternItems` which are used 
by pattern items class
                class derivatives for `TuplePattern`, `TupleStructPattern` & 
`SlicePattern`.
                - Standardized the derived class names to have `HasRest` or 
`NoRest` as suffixes.
                 - Values for the common `ItemType` enum is updated to 
`HAS_REST` or `NO_REST`.
        * ast/rust-pattern.cc: Renamed the classes accordingly.
        * ast/rust-ast-collector.cc: Renamed the classes accordingly.
        * ast/rust-ast-collector.h: Renamed the classes accordingly.
        * ast/rust-ast-full-decls.h: Renamed the classes accordingly.
        * ast/rust-ast-visitor.cc: Renamed the classes accordingly.
        * ast/rust-ast-visitor.h: Renamed the classes accordingly.
        * ast/rust-desugar-for-loops.cc: Renamed the classes accordingly.
        * ast/rust-desugar-question-mark.cc: Renamed the classes accordingly.
        * expand/rust-cfg-strip.cc: Renamed the classes accordingly.
        * expand/rust-cfg-strip.h: Renamed the classes accordingly.
        * expand/rust-derive-clone.cc: Renamed the classes accordingly.
        * expand/rust-derive-cmp-common.cc: Renamed the classes accordingly.
        * expand/rust-derive-hash.cc: Renamed the classes accordingly.
        * expand/rust-derive-ord.cc: Renamed the classes accordingly.
        * expand/rust-derive-partial-eq.cc: Renamed the classes accordingly.
        * expand/rust-derive.h: Renamed the classes accordingly.
        * expand/rust-expand-visitor.cc: Renamed the classes accordingly.
        * expand/rust-expand-visitor.h: Renamed the classes accordingly.
        * hir/rust-ast-lower-base.cc: Renamed the classes accordingly.
        * hir/rust-ast-lower-base.h: Renamed the classes accordingly.
        * hir/rust-ast-lower-pattern.cc: Renamed the classes accordingly.
        * hir/tree/rust-hir-pattern.h: Renamed the classes accordingly.
        * parse/rust-parse-impl.h: Renamed the classes accordingly.
        * resolve/rust-ast-resolve-base.cc: Renamed the classes accordingly.
        * resolve/rust-ast-resolve-base.h: Renamed the classes accordingly.
        * resolve/rust-ast-resolve-pattern.cc: Renamed the classes accordingly.
        * util/rust-attributes.cc: Renamed the classes accordingly.
        * util/rust-attributes.h: Renamed the classes accordingly.

Signed-off-by: Yap Zhi Heng <[email protected]>
---
 gcc/rust/ast/rust-ast-collector.cc           |   8 +-
 gcc/rust/ast/rust-ast-collector.h            |   8 +-
 gcc/rust/ast/rust-ast-full-decls.h           |   8 +-
 gcc/rust/ast/rust-ast-visitor.cc             |   8 +-
 gcc/rust/ast/rust-ast-visitor.h              |  16 +-
 gcc/rust/ast/rust-desugar-for-loops.cc       |   2 +-
 gcc/rust/ast/rust-desugar-question-mark.cc   |   4 +-
 gcc/rust/ast/rust-pattern.cc                 |  16 +-
 gcc/rust/ast/rust-pattern.h                  | 182 ++++++++-----------
 gcc/rust/expand/rust-cfg-strip.cc            |   8 +-
 gcc/rust/expand/rust-cfg-strip.h             |   8 +-
 gcc/rust/expand/rust-derive-clone.cc         |   2 +-
 gcc/rust/expand/rust-derive-cmp-common.cc    |   8 +-
 gcc/rust/expand/rust-derive-hash.cc          |   2 +-
 gcc/rust/expand/rust-derive-ord.cc           |   2 +-
 gcc/rust/expand/rust-derive-partial-eq.cc    |  10 +-
 gcc/rust/expand/rust-derive.h                |  10 +-
 gcc/rust/expand/rust-expand-visitor.cc       |   8 +-
 gcc/rust/expand/rust-expand-visitor.h        |   8 +-
 gcc/rust/hir/rust-ast-lower-base.cc          |  12 +-
 gcc/rust/hir/rust-ast-lower-base.h           |  12 +-
 gcc/rust/hir/rust-ast-lower-pattern.cc       |  29 ++-
 gcc/rust/hir/tree/rust-hir-pattern.h         |   2 +-
 gcc/rust/parse/rust-parse-impl.h             |  36 ++--
 gcc/rust/resolve/rust-ast-resolve-base.cc    |   8 +-
 gcc/rust/resolve/rust-ast-resolve-base.h     |   8 +-
 gcc/rust/resolve/rust-ast-resolve-pattern.cc |  28 +--
 gcc/rust/util/rust-attributes.cc             |   8 +-
 gcc/rust/util/rust-attributes.h              |   8 +-
 29 files changed, 218 insertions(+), 251 deletions(-)

diff --git a/gcc/rust/ast/rust-ast-collector.cc 
b/gcc/rust/ast/rust-ast-collector.cc
index 2854525d121..685992c4781 100644
--- a/gcc/rust/ast/rust-ast-collector.cc
+++ b/gcc/rust/ast/rust-ast-collector.cc
@@ -2650,13 +2650,13 @@ TokenCollector::visit (StructPattern &pattern)
 // void TokenCollector::visit(TupleStructItems& ){}
 
 void
-TokenCollector::visit (TupleStructItemsNoRange &pattern)
+TokenCollector::visit (TupleStructItemsNoRest &pattern)
 {
   visit_items_joined_by_separator (pattern.get_patterns ());
 }
 
 void
-TokenCollector::visit (TupleStructItemsRange &pattern)
+TokenCollector::visit (TupleStructItemsHasRest &pattern)
 {
   for (auto &lower : pattern.get_lower_patterns ())
     {
@@ -2683,13 +2683,13 @@ TokenCollector::visit (TupleStructPattern &pattern)
 // {}
 
 void
-TokenCollector::visit (TuplePatternItemsMultiple &pattern)
+TokenCollector::visit (TuplePatternItemsNoRest &pattern)
 {
   visit_items_joined_by_separator (pattern.get_patterns (), COMMA);
 }
 
 void
-TokenCollector::visit (TuplePatternItemsRanged &pattern)
+TokenCollector::visit (TuplePatternItemsHasRest &pattern)
 {
   for (auto &lower : pattern.get_lower_patterns ())
     {
diff --git a/gcc/rust/ast/rust-ast-collector.h 
b/gcc/rust/ast/rust-ast-collector.h
index d3ab18a3d10..6f414e86e99 100644
--- a/gcc/rust/ast/rust-ast-collector.h
+++ b/gcc/rust/ast/rust-ast-collector.h
@@ -370,12 +370,12 @@ public:
   void visit (StructPatternFieldIdent &field);
   void visit (StructPattern &pattern);
   // void visit(TupleStructItems& tuple_items);
-  void visit (TupleStructItemsNoRange &tuple_items);
-  void visit (TupleStructItemsRange &tuple_items);
+  void visit (TupleStructItemsNoRest &tuple_items);
+  void visit (TupleStructItemsHasRest &tuple_items);
   void visit (TupleStructPattern &pattern);
   // void visit(TuplePatternItems& tuple_items);
-  void visit (TuplePatternItemsMultiple &tuple_items);
-  void visit (TuplePatternItemsRanged &tuple_items);
+  void visit (TuplePatternItemsNoRest &tuple_items);
+  void visit (TuplePatternItemsHasRest &tuple_items);
   void visit (TuplePattern &pattern);
   void visit (GroupedPattern &pattern);
   void visit (SlicePatternItemsNoRest &items);
diff --git a/gcc/rust/ast/rust-ast-full-decls.h 
b/gcc/rust/ast/rust-ast-full-decls.h
index 09706cecf2c..b646cdf078c 100644
--- a/gcc/rust/ast/rust-ast-full-decls.h
+++ b/gcc/rust/ast/rust-ast-full-decls.h
@@ -240,12 +240,12 @@ class StructPatternFieldIdent;
 class StructPatternElements;
 class StructPattern;
 class TupleStructItems;
-class TupleStructItemsNoRange;
-class TupleStructItemsRange;
+class TupleStructItemsNoRest;
+class TupleStructItemsHasRest;
 class TupleStructPattern;
 class TuplePatternItems;
-class TuplePatternItemsMultiple;
-class TuplePatternItemsRanged;
+class TuplePatternItemsNoRest;
+class TuplePatternItemsHasRest;
 class TuplePattern;
 class GroupedPattern;
 class SlicePatternItemsNoRest;
diff --git a/gcc/rust/ast/rust-ast-visitor.cc b/gcc/rust/ast/rust-ast-visitor.cc
index ab8cdbe4510..cf1bbe3b3cf 100644
--- a/gcc/rust/ast/rust-ast-visitor.cc
+++ b/gcc/rust/ast/rust-ast-visitor.cc
@@ -1296,14 +1296,14 @@ DefaultASTVisitor::visit (AST::StructPattern &pattern)
 }
 
 void
-DefaultASTVisitor::visit (AST::TupleStructItemsNoRange &tuple_items)
+DefaultASTVisitor::visit (AST::TupleStructItemsNoRest &tuple_items)
 {
   for (auto &pattern : tuple_items.get_patterns ())
     visit (pattern);
 }
 
 void
-DefaultASTVisitor::visit (AST::TupleStructItemsRange &tuple_items)
+DefaultASTVisitor::visit (AST::TupleStructItemsHasRest &tuple_items)
 {
   for (auto &lower : tuple_items.get_lower_patterns ())
     visit (lower);
@@ -1319,14 +1319,14 @@ DefaultASTVisitor::visit (AST::TupleStructPattern 
&pattern)
 }
 
 void
-DefaultASTVisitor::visit (AST::TuplePatternItemsMultiple &tuple_items)
+DefaultASTVisitor::visit (AST::TuplePatternItemsNoRest &tuple_items)
 {
   for (auto &pattern : tuple_items.get_patterns ())
     visit (pattern);
 }
 
 void
-DefaultASTVisitor::visit (AST::TuplePatternItemsRanged &tuple_items)
+DefaultASTVisitor::visit (AST::TuplePatternItemsHasRest &tuple_items)
 {
   for (auto &lower : tuple_items.get_lower_patterns ())
     visit (lower);
diff --git a/gcc/rust/ast/rust-ast-visitor.h b/gcc/rust/ast/rust-ast-visitor.h
index 2d81aa1908f..a6b4fe83b0b 100644
--- a/gcc/rust/ast/rust-ast-visitor.h
+++ b/gcc/rust/ast/rust-ast-visitor.h
@@ -204,12 +204,12 @@ public:
   virtual void visit (StructPatternFieldIdent &field) = 0;
   virtual void visit (StructPattern &pattern) = 0;
   // virtual void visit(TupleStructItems& tuple_items) = 0;
-  virtual void visit (TupleStructItemsNoRange &tuple_items) = 0;
-  virtual void visit (TupleStructItemsRange &tuple_items) = 0;
+  virtual void visit (TupleStructItemsNoRest &tuple_items) = 0;
+  virtual void visit (TupleStructItemsHasRest &tuple_items) = 0;
   virtual void visit (TupleStructPattern &pattern) = 0;
   // virtual void visit(TuplePatternItems& tuple_items) = 0;
-  virtual void visit (TuplePatternItemsMultiple &tuple_items) = 0;
-  virtual void visit (TuplePatternItemsRanged &tuple_items) = 0;
+  virtual void visit (TuplePatternItemsNoRest &tuple_items) = 0;
+  virtual void visit (TuplePatternItemsHasRest &tuple_items) = 0;
   virtual void visit (TuplePattern &pattern) = 0;
   virtual void visit (GroupedPattern &pattern) = 0;
   virtual void visit (SlicePatternItemsNoRest &items) = 0;
@@ -381,11 +381,11 @@ public:
   virtual void visit (AST::StructPatternFieldIdentPat &field) override;
   virtual void visit (AST::StructPatternFieldIdent &field) override;
   virtual void visit (AST::StructPattern &pattern) override;
-  virtual void visit (AST::TupleStructItemsNoRange &tuple_items) override;
-  virtual void visit (AST::TupleStructItemsRange &tuple_items) override;
+  virtual void visit (AST::TupleStructItemsNoRest &tuple_items) override;
+  virtual void visit (AST::TupleStructItemsHasRest &tuple_items) override;
   virtual void visit (AST::TupleStructPattern &pattern) override;
-  virtual void visit (AST::TuplePatternItemsMultiple &tuple_items) override;
-  virtual void visit (AST::TuplePatternItemsRanged &tuple_items) override;
+  virtual void visit (AST::TuplePatternItemsNoRest &tuple_items) override;
+  virtual void visit (AST::TuplePatternItemsHasRest &tuple_items) override;
   virtual void visit (AST::TuplePattern &pattern) override;
   virtual void visit (AST::GroupedPattern &pattern) override;
   virtual void visit (AST::SlicePatternItemsNoRest &items) override;
diff --git a/gcc/rust/ast/rust-desugar-for-loops.cc 
b/gcc/rust/ast/rust-desugar-for-loops.cc
index 5cc1c19ec14..9a124234055 100644
--- a/gcc/rust/ast/rust-desugar-for-loops.cc
+++ b/gcc/rust/ast/rust-desugar-for-loops.cc
@@ -51,7 +51,7 @@ DesugarForLoops::DesugarCtx::make_continue_arm ()
   patterns.emplace_back (std::move (val));
 
   auto pattern_item = std::unique_ptr<TupleStructItems> (
-    new TupleStructItemsNoRange (std::move (patterns)));
+    new TupleStructItemsNoRest (std::move (patterns)));
   auto pattern = std::unique_ptr<Pattern> (new TupleStructPattern (
     builder.path_in_expression (LangItem::Kind::OPTION_SOME),
     std::move (pattern_item)));
diff --git a/gcc/rust/ast/rust-desugar-question-mark.cc 
b/gcc/rust/ast/rust-desugar-question-mark.cc
index 01400d834b0..20a49039645 100644
--- a/gcc/rust/ast/rust-desugar-question-mark.cc
+++ b/gcc/rust/ast/rust-desugar-question-mark.cc
@@ -55,7 +55,7 @@ ok_case (Builder &builder)
   patterns.emplace_back (std::move (val));
 
   auto pattern_item = std::unique_ptr<TupleStructItems> (
-    new TupleStructItemsNoRange (std::move (patterns)));
+    new TupleStructItemsNoRest (std::move (patterns)));
   auto pattern = std::unique_ptr<Pattern> (new TupleStructPattern (
     builder.path_in_expression (LangItem::Kind::RESULT_OK),
     std::move (pattern_item)));
@@ -82,7 +82,7 @@ err_case (Builder &builder)
   patterns.emplace_back (std::move (val));
 
   auto pattern_item = std::unique_ptr<TupleStructItems> (
-    new TupleStructItemsNoRange (std::move (patterns)));
+    new TupleStructItemsNoRest (std::move (patterns)));
   auto pattern = std::unique_ptr<Pattern> (new TupleStructPattern (
     builder.path_in_expression (LangItem::Kind::RESULT_ERR),
     std::move (pattern_item)));
diff --git a/gcc/rust/ast/rust-pattern.cc b/gcc/rust/ast/rust-pattern.cc
index 15ab0b75741..ebe872402ea 100644
--- a/gcc/rust/ast/rust-pattern.cc
+++ b/gcc/rust/ast/rust-pattern.cc
@@ -212,7 +212,7 @@ StructPattern::as_string () const
 }
 
 std::string
-TupleStructItemsNoRange::as_string () const
+TupleStructItemsNoRest::as_string () const
 {
   std::string str;
 
@@ -223,7 +223,7 @@ TupleStructItemsNoRange::as_string () const
 }
 
 std::string
-TupleStructItemsRange::as_string () const
+TupleStructItemsHasRest::as_string () const
 {
   std::string str ("\n  Lower patterns: ");
 
@@ -264,7 +264,7 @@ TupleStructPattern::as_string () const
 }
 
 std::string
-TuplePatternItemsMultiple::as_string () const
+TuplePatternItemsNoRest::as_string () const
 {
   std::string str;
 
@@ -275,7 +275,7 @@ TuplePatternItemsMultiple::as_string () const
 }
 
 std::string
-TuplePatternItemsRanged::as_string () const
+TuplePatternItemsHasRest::as_string () const
 {
   std::string str;
 
@@ -421,7 +421,7 @@ SlicePattern::accept_vis (ASTVisitor &vis)
 }
 
 void
-TuplePatternItemsRanged::accept_vis (ASTVisitor &vis)
+TuplePatternItemsHasRest::accept_vis (ASTVisitor &vis)
 {
   vis.visit (*this);
 }
@@ -433,7 +433,7 @@ TuplePattern::accept_vis (ASTVisitor &vis)
 }
 
 void
-TuplePatternItemsMultiple::accept_vis (ASTVisitor &vis)
+TuplePatternItemsNoRest::accept_vis (ASTVisitor &vis)
 {
   vis.visit (*this);
 }
@@ -517,13 +517,13 @@ StructPattern::accept_vis (ASTVisitor &vis)
 }
 
 void
-TupleStructItemsNoRange::accept_vis (ASTVisitor &vis)
+TupleStructItemsNoRest::accept_vis (ASTVisitor &vis)
 {
   vis.visit (*this);
 }
 
 void
-TupleStructItemsRange::accept_vis (ASTVisitor &vis)
+TupleStructItemsHasRest::accept_vis (ASTVisitor &vis)
 {
   vis.visit (*this);
 }
diff --git a/gcc/rust/ast/rust-pattern.h b/gcc/rust/ast/rust-pattern.h
index 029a5b36c6a..e66a733f33b 100644
--- a/gcc/rust/ast/rust-pattern.h
+++ b/gcc/rust/ast/rust-pattern.h
@@ -976,49 +976,62 @@ protected:
   }
 };
 
-// Base abstract class for patterns used in TupleStructPattern
-class TupleStructItems
+// Base abstract class for TupleStructItems, TuplePatternItems &
+// SlicePatternItems
+class PatternItems
 {
 public:
   enum ItemType
   {
-    RANGE,
-    NO_RANGE
+    NO_REST,
+    HAS_REST,
   };
 
-  virtual ~TupleStructItems () {}
+  virtual ~PatternItems () {}
 
   // TODO: should this store location data?
 
   // Unique pointer custom clone function
-  std::unique_ptr<TupleStructItems> clone_tuple_struct_items () const
+  std::unique_ptr<PatternItems> clone_pattern_items () const
   {
-    return std::unique_ptr<TupleStructItems> (clone_tuple_struct_items_impl 
());
+    return std::unique_ptr<PatternItems> (clone_pattern_items_impl ());
   }
 
   virtual std::string as_string () const = 0;
-
+  virtual ItemType get_item_type () const = 0;
   virtual void accept_vis (ASTVisitor &vis) = 0;
 
-  virtual ItemType get_item_type () const = 0;
+protected:
+  virtual PatternItems *clone_pattern_items_impl () const = 0;
+};
+
+// Base abstract class for patterns used in TupleStructPattern
+class TupleStructItems : public PatternItems
+{
+public:
+  // Unique pointer custom clone function
+  std::unique_ptr<TupleStructItems> clone_tuple_struct_items () const
+  {
+    return std::unique_ptr<TupleStructItems> (clone_pattern_items_impl ());
+  }
 
 protected:
   // pure virtual clone implementation
-  virtual TupleStructItems *clone_tuple_struct_items_impl () const = 0;
+  virtual TupleStructItems *clone_pattern_items_impl () const = 0;
 };
 
 // Class for non-ranged tuple struct pattern patterns
-class TupleStructItemsNoRange : public TupleStructItems
+class TupleStructItemsNoRest : public TupleStructItems
 {
   std::vector<std::unique_ptr<Pattern>> patterns;
 
 public:
-  TupleStructItemsNoRange (std::vector<std::unique_ptr<Pattern>> patterns)
+  TupleStructItemsNoRest (std::vector<std::unique_ptr<Pattern>> patterns)
     : patterns (std::move (patterns))
   {}
 
   // Copy constructor with vector clone
-  TupleStructItemsNoRange (TupleStructItemsNoRange const &other)
+  TupleStructItemsNoRest (TupleStructItemsNoRest const &other)
   {
     patterns.reserve (other.patterns.size ());
     for (const auto &e : other.patterns)
@@ -1026,7 +1039,7 @@ public:
   }
 
   // Overloaded assignment operator with vector clone
-  TupleStructItemsNoRange &operator= (TupleStructItemsNoRange const &other)
+  TupleStructItemsNoRest &operator= (TupleStructItemsNoRest const &other)
   {
     patterns.clear ();
     patterns.reserve (other.patterns.size ());
@@ -1037,9 +1050,8 @@ public:
   }
 
   // move constructors
-  TupleStructItemsNoRange (TupleStructItemsNoRange &&other) = default;
-  TupleStructItemsNoRange &operator= (TupleStructItemsNoRange &&other)
-    = default;
+  TupleStructItemsNoRest (TupleStructItemsNoRest &&other) = default;
+  TupleStructItemsNoRest &operator= (TupleStructItemsNoRest &&other) = default;
 
   std::string as_string () const override;
 
@@ -1052,32 +1064,32 @@ public:
     return patterns;
   }
 
-  ItemType get_item_type () const override final { return ItemType::NO_RANGE; }
+  ItemType get_item_type () const override final { return ItemType::NO_REST; }
 
 protected:
   /* Use covariance to implement clone function as returning this object rather
    * than base */
-  TupleStructItemsNoRange *clone_tuple_struct_items_impl () const override
+  TupleStructItemsNoRest *clone_pattern_items_impl () const override
   {
-    return new TupleStructItemsNoRange (*this);
+    return new TupleStructItemsNoRest (*this);
   }
 };
 
 // Class for ranged tuple struct pattern patterns
-class TupleStructItemsRange : public TupleStructItems
+class TupleStructItemsHasRest : public TupleStructItems
 {
   std::vector<std::unique_ptr<Pattern>> lower_patterns;
   std::vector<std::unique_ptr<Pattern>> upper_patterns;
 
 public:
-  TupleStructItemsRange (std::vector<std::unique_ptr<Pattern>> lower_patterns,
-                        std::vector<std::unique_ptr<Pattern>> upper_patterns)
+  TupleStructItemsHasRest (std::vector<std::unique_ptr<Pattern>> 
lower_patterns,
+                          std::vector<std::unique_ptr<Pattern>> upper_patterns)
     : lower_patterns (std::move (lower_patterns)),
       upper_patterns (std::move (upper_patterns))
   {}
 
   // Copy constructor with vector clone
-  TupleStructItemsRange (TupleStructItemsRange const &other)
+  TupleStructItemsHasRest (TupleStructItemsHasRest const &other)
   {
     lower_patterns.reserve (other.lower_patterns.size ());
     for (const auto &e : other.lower_patterns)
@@ -1089,7 +1101,7 @@ public:
   }
 
   // Overloaded assignment operator to clone
-  TupleStructItemsRange &operator= (TupleStructItemsRange const &other)
+  TupleStructItemsHasRest &operator= (TupleStructItemsHasRest const &other)
   {
     lower_patterns.clear ();
     lower_patterns.reserve (other.lower_patterns.size ());
@@ -1105,8 +1117,9 @@ public:
   }
 
   // move constructors
-  TupleStructItemsRange (TupleStructItemsRange &&other) = default;
-  TupleStructItemsRange &operator= (TupleStructItemsRange &&other) = default;
+  TupleStructItemsHasRest (TupleStructItemsHasRest &&other) = default;
+  TupleStructItemsHasRest &operator= (TupleStructItemsHasRest &&other)
+    = default;
 
   std::string as_string () const override;
 
@@ -1132,14 +1145,14 @@ public:
     return upper_patterns;
   }
 
-  ItemType get_item_type () const override final { return ItemType::RANGE; }
+  ItemType get_item_type () const override final { return ItemType::HAS_REST; }
 
 protected:
   /* Use covariance to implement clone function as returning this object rather
    * than base */
-  TupleStructItemsRange *clone_tuple_struct_items_impl () const override
+  TupleStructItemsHasRest *clone_pattern_items_impl () const override
   {
-    return new TupleStructItemsRange (*this);
+    return new TupleStructItemsHasRest (*this);
   }
 };
 
@@ -1222,49 +1235,32 @@ protected:
 };
 
 // Base abstract class representing TuplePattern patterns
-class TuplePatternItems
+class TuplePatternItems : public PatternItems
 {
 public:
-  enum TuplePatternItemType
-  {
-    MULTIPLE,
-    RANGED,
-  };
-
-  virtual ~TuplePatternItems () {}
-
-  // TODO: should this store location data?
-
   // Unique pointer custom clone function
   std::unique_ptr<TuplePatternItems> clone_tuple_pattern_items () const
   {
-    return std::unique_ptr<TuplePatternItems> (
-      clone_tuple_pattern_items_impl ());
+    return std::unique_ptr<TuplePatternItems> (clone_pattern_items_impl ());
   }
 
-  virtual std::string as_string () const = 0;
-
-  virtual void accept_vis (ASTVisitor &vis) = 0;
-
-  virtual TuplePatternItemType get_pattern_type () const = 0;
-
 protected:
   // pure virtual clone implementation
-  virtual TuplePatternItems *clone_tuple_pattern_items_impl () const = 0;
+  virtual TuplePatternItems *clone_pattern_items_impl () const = 0;
 };
 
-// Class representing TuplePattern patterns where there are multiple patterns
-class TuplePatternItemsMultiple : public TuplePatternItems
+// Class representing TuplePattern patterns which contains no rest pattern
+class TuplePatternItemsNoRest : public TuplePatternItems
 {
   std::vector<std::unique_ptr<Pattern>> patterns;
 
 public:
-  TuplePatternItemsMultiple (std::vector<std::unique_ptr<Pattern>> patterns)
+  TuplePatternItemsNoRest (std::vector<std::unique_ptr<Pattern>> patterns)
     : patterns (std::move (patterns))
   {}
 
   // Copy constructor with vector clone
-  TuplePatternItemsMultiple (TuplePatternItemsMultiple const &other)
+  TuplePatternItemsNoRest (TuplePatternItemsNoRest const &other)
   {
     patterns.reserve (other.patterns.size ());
     for (const auto &e : other.patterns)
@@ -1272,7 +1268,7 @@ public:
   }
 
   // Overloaded assignment operator to vector clone
-  TuplePatternItemsMultiple &operator= (TuplePatternItemsMultiple const &other)
+  TuplePatternItemsNoRest &operator= (TuplePatternItemsNoRest const &other)
   {
     patterns.clear ();
     patterns.reserve (other.patterns.size ());
@@ -1283,8 +1279,8 @@ public:
   }
 
   // move constructors
-  TuplePatternItemsMultiple (TuplePatternItemsMultiple &&other) = default;
-  TuplePatternItemsMultiple &operator= (TuplePatternItemsMultiple &&other)
+  TuplePatternItemsNoRest (TuplePatternItemsNoRest &&other) = default;
+  TuplePatternItemsNoRest &operator= (TuplePatternItemsNoRest &&other)
     = default;
 
   std::string as_string () const override;
@@ -1298,35 +1294,33 @@ public:
     return patterns;
   }
 
-  TuplePatternItemType get_pattern_type () const override
-  {
-    return TuplePatternItemType::MULTIPLE;
-  }
+  ItemType get_item_type () const override { return ItemType::NO_REST; }
 
 protected:
   /* Use covariance to implement clone function as returning this object rather
    * than base */
-  TuplePatternItemsMultiple *clone_tuple_pattern_items_impl () const override
+  TuplePatternItemsNoRest *clone_pattern_items_impl () const override
   {
-    return new TuplePatternItemsMultiple (*this);
+    return new TuplePatternItemsNoRest (*this);
   }
 };
 
-// Class representing TuplePattern patterns where there are a range of patterns
-class TuplePatternItemsRanged : public TuplePatternItems
+// Class representing TuplePattern patterns which contains a rest pattern
+class TuplePatternItemsHasRest : public TuplePatternItems
 {
   std::vector<std::unique_ptr<Pattern>> lower_patterns;
   std::vector<std::unique_ptr<Pattern>> upper_patterns;
 
 public:
-  TuplePatternItemsRanged (std::vector<std::unique_ptr<Pattern>> 
lower_patterns,
-                          std::vector<std::unique_ptr<Pattern>> upper_patterns)
+  TuplePatternItemsHasRest (
+    std::vector<std::unique_ptr<Pattern>> lower_patterns,
+    std::vector<std::unique_ptr<Pattern>> upper_patterns)
     : lower_patterns (std::move (lower_patterns)),
       upper_patterns (std::move (upper_patterns))
   {}
 
   // Copy constructor with vector clone
-  TuplePatternItemsRanged (TuplePatternItemsRanged const &other)
+  TuplePatternItemsHasRest (TuplePatternItemsHasRest const &other)
   {
     lower_patterns.reserve (other.lower_patterns.size ());
     for (const auto &e : other.lower_patterns)
@@ -1338,7 +1332,7 @@ public:
   }
 
   // Overloaded assignment operator to clone
-  TuplePatternItemsRanged &operator= (TuplePatternItemsRanged const &other)
+  TuplePatternItemsHasRest &operator= (TuplePatternItemsHasRest const &other)
   {
     lower_patterns.clear ();
     lower_patterns.reserve (other.lower_patterns.size ());
@@ -1354,8 +1348,8 @@ public:
   }
 
   // move constructors
-  TuplePatternItemsRanged (TuplePatternItemsRanged &&other) = default;
-  TuplePatternItemsRanged &operator= (TuplePatternItemsRanged &&other)
+  TuplePatternItemsHasRest (TuplePatternItemsHasRest &&other) = default;
+  TuplePatternItemsHasRest &operator= (TuplePatternItemsHasRest &&other)
     = default;
 
   std::string as_string () const override;
@@ -1382,17 +1376,14 @@ public:
     return upper_patterns;
   }
 
-  TuplePatternItemType get_pattern_type () const override
-  {
-    return TuplePatternItemType::RANGED;
-  }
+  ItemType get_item_type () const override { return ItemType::HAS_REST; }
 
 protected:
   /* Use covariance to implement clone function as returning this object rather
    * than base */
-  TuplePatternItemsRanged *clone_tuple_pattern_items_impl () const override
+  TuplePatternItemsHasRest *clone_pattern_items_impl () const override
   {
-    return new TuplePatternItemsRanged (*this);
+    return new TuplePatternItemsHasRest (*this);
   }
 };
 
@@ -1529,35 +1520,18 @@ protected:
 };
 
 // Base abstract class representing patterns in a SlicePattern
-class SlicePatternItems
+class SlicePatternItems : public PatternItems
 {
 public:
-  enum SlicePatternItemType
-  {
-    NO_REST,
-    HAS_REST,
-  };
-
-  virtual ~SlicePatternItems () {}
-
-  // TODO: should this store location data?
-
   // Unique pointer custom clone function
   std::unique_ptr<SlicePatternItems> clone_slice_pattern_items () const
   {
-    return std::unique_ptr<SlicePatternItems> (
-      clone_slice_pattern_items_impl ());
+    return std::unique_ptr<SlicePatternItems> (clone_pattern_items_impl ());
   }
 
-  virtual std::string as_string () const = 0;
-
-  virtual void accept_vis (ASTVisitor &vis) = 0;
-
-  virtual SlicePatternItemType get_pattern_type () const = 0;
-
 protected:
   // pure virtual clone implementation
-  virtual SlicePatternItems *clone_slice_pattern_items_impl () const = 0;
+  virtual SlicePatternItems *clone_pattern_items_impl () const = 0;
 };
 
 // Class representing the patterns in a SlicePattern without `..`
@@ -1605,15 +1579,12 @@ public:
     return patterns;
   }
 
-  SlicePatternItemType get_pattern_type () const override
-  {
-    return SlicePatternItemType::NO_REST;
-  }
+  ItemType get_item_type () const override { return ItemType::NO_REST; }
 
 protected:
   /* Use covariance to implement clone function as returning this object rather
    * than base */
-  SlicePatternItemsNoRest *clone_slice_pattern_items_impl () const override
+  SlicePatternItemsNoRest *clone_pattern_items_impl () const override
   {
     return new SlicePatternItemsNoRest (*this);
   }
@@ -1690,15 +1661,12 @@ public:
     return upper_patterns;
   }
 
-  SlicePatternItemType get_pattern_type () const override
-  {
-    return SlicePatternItemType::HAS_REST;
-  }
+  ItemType get_item_type () const override { return ItemType::HAS_REST; }
 
 protected:
   /* Use covariance to implement clone function as returning this object rather
    * than base */
-  SlicePatternItemsHasRest *clone_slice_pattern_items_impl () const override
+  SlicePatternItemsHasRest *clone_pattern_items_impl () const override
   {
     return new SlicePatternItemsHasRest (*this);
   }
diff --git a/gcc/rust/expand/rust-cfg-strip.cc 
b/gcc/rust/expand/rust-cfg-strip.cc
index 8a1cf787a0a..d45f7558948 100644
--- a/gcc/rust/expand/rust-cfg-strip.cc
+++ b/gcc/rust/expand/rust-cfg-strip.cc
@@ -2390,7 +2390,7 @@ CfgStrip::visit (AST::StructPattern &pattern)
 }
 
 void
-CfgStrip::visit (AST::TupleStructItemsNoRange &tuple_items)
+CfgStrip::visit (AST::TupleStructItemsNoRest &tuple_items)
 {
   AST::DefaultASTVisitor::visit (tuple_items);
   // can't strip individual patterns, only sub-patterns
@@ -2403,7 +2403,7 @@ CfgStrip::visit (AST::TupleStructItemsNoRange 
&tuple_items)
     }
 }
 void
-CfgStrip::visit (AST::TupleStructItemsRange &tuple_items)
+CfgStrip::visit (AST::TupleStructItemsHasRest &tuple_items)
 {
   AST::DefaultASTVisitor::visit (tuple_items);
   // can't strip individual patterns, only sub-patterns
@@ -2436,7 +2436,7 @@ CfgStrip::visit (AST::TupleStructPattern &pattern)
 }
 
 void
-CfgStrip::visit (AST::TuplePatternItemsMultiple &tuple_items)
+CfgStrip::visit (AST::TuplePatternItemsNoRest &tuple_items)
 {
   AST::DefaultASTVisitor::visit (tuple_items);
 
@@ -2451,7 +2451,7 @@ CfgStrip::visit (AST::TuplePatternItemsMultiple 
&tuple_items)
 }
 
 void
-CfgStrip::visit (AST::TuplePatternItemsRanged &tuple_items)
+CfgStrip::visit (AST::TuplePatternItemsHasRest &tuple_items)
 {
   AST::DefaultASTVisitor::visit (tuple_items);
 
diff --git a/gcc/rust/expand/rust-cfg-strip.h b/gcc/rust/expand/rust-cfg-strip.h
index 75c50471924..9d6a6d83ad4 100644
--- a/gcc/rust/expand/rust-cfg-strip.h
+++ b/gcc/rust/expand/rust-cfg-strip.h
@@ -175,11 +175,11 @@ public:
   void visit (AST::StructPatternFieldIdentPat &field) override;
   void visit (AST::StructPatternFieldIdent &field) override;
   void visit (AST::StructPattern &pattern) override;
-  void visit (AST::TupleStructItemsNoRange &tuple_items) override;
-  void visit (AST::TupleStructItemsRange &tuple_items) override;
+  void visit (AST::TupleStructItemsNoRest &tuple_items) override;
+  void visit (AST::TupleStructItemsHasRest &tuple_items) override;
   void visit (AST::TupleStructPattern &pattern) override;
-  void visit (AST::TuplePatternItemsMultiple &tuple_items) override;
-  void visit (AST::TuplePatternItemsRanged &tuple_items) override;
+  void visit (AST::TuplePatternItemsNoRest &tuple_items) override;
+  void visit (AST::TuplePatternItemsHasRest &tuple_items) override;
   void visit (AST::GroupedPattern &pattern) override;
   void visit (AST::SlicePatternItemsNoRest &items) override;
   void visit (AST::SlicePatternItemsHasRest &items) override;
diff --git a/gcc/rust/expand/rust-derive-clone.cc 
b/gcc/rust/expand/rust-derive-clone.cc
index 5987d14db8a..27dcc66ee3f 100644
--- a/gcc/rust/expand/rust-derive-clone.cc
+++ b/gcc/rust/expand/rust-derive-clone.cc
@@ -210,7 +210,7 @@ DeriveClone::clone_enum_tuple (PathInExpression 
variant_path,
     }
 
   auto pattern_items = std::unique_ptr<TupleStructItems> (
-    new TupleStructItemsNoRange (std::move (patterns)));
+    new TupleStructItemsNoRest (std::move (patterns)));
 
   auto pattern = std::unique_ptr<Pattern> (new ReferencePattern (
     std::unique_ptr<Pattern> (new TupleStructPattern (
diff --git a/gcc/rust/expand/rust-derive-cmp-common.cc 
b/gcc/rust/expand/rust-derive-cmp-common.cc
index 22ca16f1772..9890bb734ef 100644
--- a/gcc/rust/expand/rust-derive-cmp-common.cc
+++ b/gcc/rust/expand/rust-derive-cmp-common.cc
@@ -101,9 +101,9 @@ EnumMatchBuilder::tuple (EnumItem &variant_raw)
   auto other_variant_path = builder.variant_path (enum_path, variant_path);
 
   auto self_pattern_items = std::unique_ptr<TupleStructItems> (
-    new TupleStructItemsNoRange (std::move (self_patterns)));
+    new TupleStructItemsNoRest (std::move (self_patterns)));
   auto other_pattern_items = std::unique_ptr<TupleStructItems> (
-    new TupleStructItemsNoRange (std::move (other_patterns)));
+    new TupleStructItemsNoRest (std::move (other_patterns)));
 
   auto self_pattern = std::unique_ptr<Pattern> (
     new ReferencePattern (std::unique_ptr<Pattern> (new TupleStructPattern (
@@ -114,7 +114,7 @@ EnumMatchBuilder::tuple (EnumItem &variant_raw)
       other_variant_path, std::move (other_pattern_items))),
     false, false, builder.loc));
 
-  auto tuple_items = std::make_unique<TuplePatternItemsMultiple> (
+  auto tuple_items = std::make_unique<TuplePatternItemsNoRest> (
     vec (std::move (self_pattern), std::move (other_pattern)));
 
   auto pattern
@@ -176,7 +176,7 @@ EnumMatchBuilder::strukt (EnumItem &variant_raw)
                                               std::move (other_elts))),
                          false, false, builder.loc));
 
-  auto tuple_items = std::make_unique<TuplePatternItemsMultiple> (
+  auto tuple_items = std::make_unique<TuplePatternItemsNoRest> (
     vec (std::move (self_pattern), std::move (other_pattern)));
 
   auto pattern
diff --git a/gcc/rust/expand/rust-derive-hash.cc 
b/gcc/rust/expand/rust-derive-hash.cc
index 94aede2fe03..616bfdb71d3 100644
--- a/gcc/rust/expand/rust-derive-hash.cc
+++ b/gcc/rust/expand/rust-derive-hash.cc
@@ -151,7 +151,7 @@ DeriveHash::match_enum_tuple (PathInExpression variant_path,
     }
 
   auto patterns_elts = std::unique_ptr<TupleStructItems> (
-    new TupleStructItemsNoRange (std::move (self_patterns)));
+    new TupleStructItemsNoRest (std::move (self_patterns)));
   auto pattern = std::unique_ptr<Pattern> (
     new ReferencePattern (std::unique_ptr<Pattern> (new TupleStructPattern (
                            variant_path, std::move (patterns_elts))),
diff --git a/gcc/rust/expand/rust-derive-ord.cc 
b/gcc/rust/expand/rust-derive-ord.cc
index afc4b71676a..6f3981fd7df 100644
--- a/gcc/rust/expand/rust-derive-ord.cc
+++ b/gcc/rust/expand/rust-derive-ord.cc
@@ -120,7 +120,7 @@ DeriveOrd::make_equal ()
   if (ordering == Ordering::Partial)
     {
       auto pattern_items = std::unique_ptr<TupleStructItems> (
-       new TupleStructItemsNoRange (vec (std::move (equal))));
+       new TupleStructItemsNoRest (vec (std::move (equal))));
 
       equal
        = std::make_unique<TupleStructPattern> (builder.path_in_expression (
diff --git a/gcc/rust/expand/rust-derive-partial-eq.cc 
b/gcc/rust/expand/rust-derive-partial-eq.cc
index a0bf87a32dd..287d8a77055 100644
--- a/gcc/rust/expand/rust-derive-partial-eq.cc
+++ b/gcc/rust/expand/rust-derive-partial-eq.cc
@@ -146,7 +146,7 @@ DerivePartialEq::match_enum_identifier (
           builder.ref_pattern (
             std::unique_ptr<Pattern> (new PathInExpression (variant_path))));
 
-  auto tuple_items = std::make_unique<TuplePatternItemsMultiple> (
+  auto tuple_items = std::make_unique<TuplePatternItemsNoRest> (
     std::move (inner_ref_patterns));
 
   auto pattern = std::make_unique<TuplePattern> (std::move (tuple_items), loc);
@@ -186,9 +186,9 @@ DerivePartialEq::match_enum_tuple (PathInExpression 
variant_path,
     }
 
   auto self_pattern_items = std::unique_ptr<TupleStructItems> (
-    new TupleStructItemsNoRange (std::move (self_patterns)));
+    new TupleStructItemsNoRest (std::move (self_patterns)));
   auto other_pattern_items = std::unique_ptr<TupleStructItems> (
-    new TupleStructItemsNoRange (std::move (other_patterns)));
+    new TupleStructItemsNoRest (std::move (other_patterns)));
 
   auto self_pattern = std::unique_ptr<Pattern> (
     new ReferencePattern (std::unique_ptr<Pattern> (new TupleStructPattern (
@@ -199,7 +199,7 @@ DerivePartialEq::match_enum_tuple (PathInExpression 
variant_path,
                            variant_path, std::move (other_pattern_items))),
                          false, false, loc));
 
-  auto tuple_items = std::make_unique<TuplePatternItemsMultiple> (
+  auto tuple_items = std::make_unique<TuplePatternItemsNoRest> (
     vec (std::move (self_pattern), std::move (other_pattern)));
 
   auto pattern = std::make_unique<TuplePattern> (std::move (tuple_items), loc);
@@ -254,7 +254,7 @@ DerivePartialEq::match_enum_struct (PathInExpression 
variant_path,
                            variant_path, loc, std::move (other_elts))),
                          false, false, loc));
 
-  auto tuple_items = std::make_unique<TuplePatternItemsMultiple> (
+  auto tuple_items = std::make_unique<TuplePatternItemsNoRest> (
     vec (std::move (self_pattern), std::move (other_pattern)));
 
   auto pattern = std::make_unique<TuplePattern> (std::move (tuple_items), loc);
diff --git a/gcc/rust/expand/rust-derive.h b/gcc/rust/expand/rust-derive.h
index 10c146ca3ef..0e066cab539 100644
--- a/gcc/rust/expand/rust-derive.h
+++ b/gcc/rust/expand/rust-derive.h
@@ -224,11 +224,11 @@ private:
   virtual void visit (StructPatternFieldIdentPat &field) override final{};
   virtual void visit (StructPatternFieldIdent &field) override final{};
   virtual void visit (StructPattern &pattern) override final{};
-  virtual void visit (TupleStructItemsNoRange &tuple_items) override final{};
-  virtual void visit (TupleStructItemsRange &tuple_items) override final{};
+  virtual void visit (TupleStructItemsNoRest &tuple_items) override final{};
+  virtual void visit (TupleStructItemsHasRest &tuple_items) override final{};
   virtual void visit (TupleStructPattern &pattern) override final{};
-  virtual void visit (TuplePatternItemsMultiple &tuple_items) override final{};
-  virtual void visit (TuplePatternItemsRanged &tuple_items) override final{};
+  virtual void visit (TuplePatternItemsNoRest &tuple_items) override final{};
+  virtual void visit (TuplePatternItemsHasRest &tuple_items) override final{};
   virtual void visit (TuplePattern &pattern) override final{};
   virtual void visit (GroupedPattern &pattern) override final{};
   virtual void visit (SlicePatternItemsNoRest &items) override final{};
@@ -262,4 +262,4 @@ private:
 } // namespace AST
 } // namespace Rust
 
-#endif // DERIVE_VISITOR_H
+#endif // DERIVE_VISITOR_H
\ No newline at end of file
diff --git a/gcc/rust/expand/rust-expand-visitor.cc 
b/gcc/rust/expand/rust-expand-visitor.cc
index c1833c276c5..da9b39cbe32 100644
--- a/gcc/rust/expand/rust-expand-visitor.cc
+++ b/gcc/rust/expand/rust-expand-visitor.cc
@@ -1067,14 +1067,14 @@ ExpandVisitor::visit (AST::AltPattern &pattern)
 }
 
 void
-ExpandVisitor::visit (AST::TupleStructItemsNoRange &tuple_items)
+ExpandVisitor::visit (AST::TupleStructItemsNoRest &tuple_items)
 {
   for (auto &sub : tuple_items.get_patterns ())
     maybe_expand_pattern (sub);
 }
 
 void
-ExpandVisitor::visit (AST::TupleStructItemsRange &tuple_items)
+ExpandVisitor::visit (AST::TupleStructItemsHasRest &tuple_items)
 {
   for (auto &sub : tuple_items.get_lower_patterns ())
     maybe_expand_pattern (sub);
@@ -1084,14 +1084,14 @@ ExpandVisitor::visit (AST::TupleStructItemsRange 
&tuple_items)
 }
 
 void
-ExpandVisitor::visit (AST::TuplePatternItemsMultiple &tuple_items)
+ExpandVisitor::visit (AST::TuplePatternItemsNoRest &tuple_items)
 {
   for (auto &sub : tuple_items.get_patterns ())
     maybe_expand_pattern (sub);
 }
 
 void
-ExpandVisitor::visit (AST::TuplePatternItemsRanged &tuple_items)
+ExpandVisitor::visit (AST::TuplePatternItemsHasRest &tuple_items)
 {
   for (auto &sub : tuple_items.get_lower_patterns ())
     maybe_expand_pattern (sub);
diff --git a/gcc/rust/expand/rust-expand-visitor.h 
b/gcc/rust/expand/rust-expand-visitor.h
index 8fee291d595..677adeae86f 100644
--- a/gcc/rust/expand/rust-expand-visitor.h
+++ b/gcc/rust/expand/rust-expand-visitor.h
@@ -278,10 +278,10 @@ public:
   void visit (AST::SlicePatternItemsNoRest &items) override;
   void visit (AST::SlicePatternItemsHasRest &items) override;
   void visit (AST::AltPattern &pattern) override;
-  void visit (AST::TupleStructItemsNoRange &tuple_items) override;
-  void visit (AST::TupleStructItemsRange &tuple_items) override;
-  void visit (AST::TuplePatternItemsMultiple &tuple_items) override;
-  void visit (AST::TuplePatternItemsRanged &tuple_items) override;
+  void visit (AST::TupleStructItemsNoRest &tuple_items) override;
+  void visit (AST::TupleStructItemsHasRest &tuple_items) override;
+  void visit (AST::TuplePatternItemsNoRest &tuple_items) override;
+  void visit (AST::TuplePatternItemsHasRest &tuple_items) override;
 
   void visit (AST::LetStmt &stmt) override;
   void visit (AST::ExprStmt &stmt) override;
diff --git a/gcc/rust/hir/rust-ast-lower-base.cc 
b/gcc/rust/hir/rust-ast-lower-base.cc
index e32918e8e85..f3faee652ba 100644
--- a/gcc/rust/hir/rust-ast-lower-base.cc
+++ b/gcc/rust/hir/rust-ast-lower-base.cc
@@ -473,20 +473,20 @@ ASTLoweringBase::visit (AST::StructPattern &)
 {}
 //  void ASTLoweringBase::visit(TupleStructItemstuple_items) {}
 void
-ASTLoweringBase::visit (AST::TupleStructItemsNoRange &)
+ASTLoweringBase::visit (AST::TupleStructItemsNoRest &)
 {}
 void
-ASTLoweringBase::visit (AST::TupleStructItemsRange &)
+ASTLoweringBase::visit (AST::TupleStructItemsHasRest &)
 {}
 void
 ASTLoweringBase::visit (AST::TupleStructPattern &)
 {}
 //  void ASTLoweringBase::visit(TuplePatternItemstuple_items) {}
 void
-ASTLoweringBase::visit (AST::TuplePatternItemsMultiple &)
+ASTLoweringBase::visit (AST::TuplePatternItemsNoRest &)
 {}
 void
-ASTLoweringBase::visit (AST::TuplePatternItemsRanged &)
+ASTLoweringBase::visit (AST::TuplePatternItemsHasRest &)
 {}
 void
 ASTLoweringBase::visit (AST::TuplePattern &)
@@ -874,7 +874,7 @@ ASTLoweringBase::attribute_handled_in_another_pass (
 
 std::unique_ptr<HIR::TuplePatternItems>
 ASTLoweringBase::lower_tuple_pattern_multiple (
-  AST::TuplePatternItemsMultiple &pattern)
+  AST::TuplePatternItemsNoRest &pattern)
 {
   std::vector<std::unique_ptr<HIR::Pattern>> patterns;
   patterns.reserve (pattern.get_patterns ().size ());
@@ -888,7 +888,7 @@ ASTLoweringBase::lower_tuple_pattern_multiple (
 
 std::unique_ptr<TuplePatternItems>
 ASTLoweringBase::lower_tuple_pattern_ranged (
-  AST::TuplePatternItemsRanged &pattern)
+  AST::TuplePatternItemsHasRest &pattern)
 {
   std::vector<std::unique_ptr<HIR::Pattern>> lower_patterns;
   lower_patterns.reserve (pattern.get_lower_patterns ().size ());
diff --git a/gcc/rust/hir/rust-ast-lower-base.h 
b/gcc/rust/hir/rust-ast-lower-base.h
index a188e178526..e720fc9b210 100644
--- a/gcc/rust/hir/rust-ast-lower-base.h
+++ b/gcc/rust/hir/rust-ast-lower-base.h
@@ -228,12 +228,12 @@ public:
   virtual void visit (AST::StructPatternFieldIdent &field) override;
   virtual void visit (AST::StructPattern &pattern) override;
   //  virtual void visit(TupleStructItems& tuple_items) override;
-  virtual void visit (AST::TupleStructItemsNoRange &tuple_items) override;
-  virtual void visit (AST::TupleStructItemsRange &tuple_items) override;
+  virtual void visit (AST::TupleStructItemsNoRest &tuple_items) override;
+  virtual void visit (AST::TupleStructItemsHasRest &tuple_items) override;
   virtual void visit (AST::TupleStructPattern &pattern) override;
   //  virtual void visit(TuplePatternItems& tuple_items) override;
-  virtual void visit (AST::TuplePatternItemsMultiple &tuple_items) override;
-  virtual void visit (AST::TuplePatternItemsRanged &tuple_items) override;
+  virtual void visit (AST::TuplePatternItemsNoRest &tuple_items) override;
+  virtual void visit (AST::TuplePatternItemsHasRest &tuple_items) override;
   virtual void visit (AST::TuplePattern &pattern) override;
   virtual void visit (AST::GroupedPattern &pattern) override;
   virtual void visit (AST::SlicePatternItemsNoRest &items) override;
@@ -317,10 +317,10 @@ protected:
   attribute_handled_in_another_pass (const std::string &attribute_path) const;
 
   std::unique_ptr<TuplePatternItems>
-  lower_tuple_pattern_multiple (AST::TuplePatternItemsMultiple &pattern);
+  lower_tuple_pattern_multiple (AST::TuplePatternItemsNoRest &pattern);
 
   std::unique_ptr<TuplePatternItems>
-  lower_tuple_pattern_ranged (AST::TuplePatternItemsRanged &pattern);
+  lower_tuple_pattern_ranged (AST::TuplePatternItemsHasRest &pattern);
 
   std::unique_ptr<SlicePatternItems>
   lower_slice_pattern_no_rest (AST::SlicePatternItemsNoRest &pattern);
diff --git a/gcc/rust/hir/rust-ast-lower-pattern.cc 
b/gcc/rust/hir/rust-ast-lower-pattern.cc
index 6933c2dca83..a209f80f4da 100644
--- a/gcc/rust/hir/rust-ast-lower-pattern.cc
+++ b/gcc/rust/hir/rust-ast-lower-pattern.cc
@@ -81,17 +81,17 @@ ASTLoweringPattern::visit (AST::TupleStructPattern &pattern)
   auto &items = pattern.get_items ();
   switch (items.get_item_type ())
     {
-    case AST::TupleStructItems::RANGE:
+    case AST::TupleStructItems::HAS_REST:
       {
        // TODO
        rust_unreachable ();
       }
       break;
 
-    case AST::TupleStructItems::NO_RANGE:
+    case AST::TupleStructItems::NO_REST:
       {
-       AST::TupleStructItemsNoRange &items_no_range
-         = static_cast<AST::TupleStructItemsNoRange &> (items);
+       AST::TupleStructItemsNoRest &items_no_range
+         = static_cast<AST::TupleStructItemsNoRest &> (items);
 
        std::vector<std::unique_ptr<HIR::Pattern>> patterns;
        patterns.reserve (items_no_range.get_patterns ().size ());
@@ -223,21 +223,20 @@ void
 ASTLoweringPattern::visit (AST::TuplePattern &pattern)
 {
   std::unique_ptr<HIR::TuplePatternItems> items;
-  switch (pattern.get_items ().get_pattern_type ())
+  switch (pattern.get_items ().get_item_type ())
     {
-    case AST::TuplePatternItems::TuplePatternItemType::MULTIPLE:
+    case AST::TuplePatternItems::ItemType::NO_REST:
       {
-       AST::TuplePatternItemsMultiple &ref
-         = static_cast<AST::TuplePatternItemsMultiple &> (
-           pattern.get_items ());
+       AST::TuplePatternItemsNoRest &ref
+         = static_cast<AST::TuplePatternItemsNoRest &> (pattern.get_items ());
        items = lower_tuple_pattern_multiple (ref);
       }
       break;
 
-    case AST::TuplePatternItems::TuplePatternItemType::RANGED:
+    case AST::TuplePatternItems::ItemType::HAS_REST:
       {
-       AST::TuplePatternItemsRanged &ref
-         = static_cast<AST::TuplePatternItemsRanged &> (pattern.get_items ());
+       AST::TuplePatternItemsHasRest &ref
+         = static_cast<AST::TuplePatternItemsHasRest &> (pattern.get_items ());
        items = lower_tuple_pattern_ranged (ref);
       }
       break;
@@ -324,16 +323,16 @@ ASTLoweringPattern::visit (AST::SlicePattern &pattern)
 {
   std::unique_ptr<HIR::SlicePatternItems> items;
 
-  switch (pattern.get_items ().get_pattern_type ())
+  switch (pattern.get_items ().get_item_type ())
     {
-    case AST::SlicePatternItems::SlicePatternItemType::NO_REST:
+    case AST::SlicePatternItems::ItemType::NO_REST:
       {
        auto &ref
          = static_cast<AST::SlicePatternItemsNoRest &> (pattern.get_items ());
        items = ASTLoweringBase::lower_slice_pattern_no_rest (ref);
       }
       break;
-    case AST::SlicePatternItems::SlicePatternItemType::HAS_REST:
+    case AST::SlicePatternItems::ItemType::HAS_REST:
       {
        auto &ref
          = static_cast<AST::SlicePatternItemsHasRest &> (pattern.get_items ());
diff --git a/gcc/rust/hir/tree/rust-hir-pattern.h 
b/gcc/rust/hir/tree/rust-hir-pattern.h
index e3581dc5c8c..e954aec309f 100644
--- a/gcc/rust/hir/tree/rust-hir-pattern.h
+++ b/gcc/rust/hir/tree/rust-hir-pattern.h
@@ -797,7 +797,7 @@ public:
   // TODO: should this store location data?
 
   // Unique pointer custom clone function
-  std::unique_ptr<PatternItems> clone_tuple_items () const
+  std::unique_ptr<PatternItems> clone_pattern_items () const
   {
     return std::unique_ptr<PatternItems> (clone_pattern_items_impl ());
   }
diff --git a/gcc/rust/parse/rust-parse-impl.h b/gcc/rust/parse/rust-parse-impl.h
index eef3b2f1592..9b38396e95c 100644
--- a/gcc/rust/parse/rust-parse-impl.h
+++ b/gcc/rust/parse/rust-parse-impl.h
@@ -10812,9 +10812,9 @@ 
Parser<ManagedTokenSource>::parse_grouped_or_tuple_pattern ()
          return nullptr;
        }
 
-      // create ranged tuple pattern items with only upper items
-      std::unique_ptr<AST::TuplePatternItemsRanged> items (
-       new AST::TuplePatternItemsRanged (
+      // create tuple pattern items with only upper pattern items
+      std::unique_ptr<AST::TuplePatternItemsHasRest> items (
+       new AST::TuplePatternItemsHasRest (
          std::vector<std::unique_ptr<AST::Pattern>> (), std::move (patterns)));
       return std::unique_ptr<AST::TuplePattern> (
        new AST::TuplePattern (std::move (items), paren_locus));
@@ -10822,8 +10822,8 @@ 
Parser<ManagedTokenSource>::parse_grouped_or_tuple_pattern ()
   else if (lexer.peek_token ()->get_id () == RIGHT_PAREN)
     {
       skip_token (RIGHT_PAREN);
-      auto items = std::unique_ptr<AST::TuplePatternItemsMultiple> (
-       new AST::TuplePatternItemsMultiple (
+      auto items = std::unique_ptr<AST::TuplePatternItemsNoRest> (
+       new AST::TuplePatternItemsNoRest (
          std::vector<std::unique_ptr<AST::Pattern>> ()));
       return std::unique_ptr<AST::TuplePattern> (
        new AST::TuplePattern (std::move (items), paren_locus));
@@ -10887,8 +10887,8 @@ 
Parser<ManagedTokenSource>::parse_grouped_or_tuple_pattern ()
            // non-ranged tuple pattern
            lexer.skip_token ();
 
-           std::unique_ptr<AST::TuplePatternItemsMultiple> items (
-             new AST::TuplePatternItemsMultiple (std::move (patterns)));
+           std::unique_ptr<AST::TuplePatternItemsNoRest> items (
+             new AST::TuplePatternItemsNoRest (std::move (patterns)));
            return std::unique_ptr<AST::TuplePattern> (
              new AST::TuplePattern (std::move (items), paren_locus));
          }
@@ -10928,9 +10928,9 @@ 
Parser<ManagedTokenSource>::parse_grouped_or_tuple_pattern ()
                return nullptr;
              }
 
-           std::unique_ptr<AST::TuplePatternItemsRanged> items (
-             new AST::TuplePatternItemsRanged (std::move (patterns),
-                                               std::move (upper_patterns)));
+           std::unique_ptr<AST::TuplePatternItemsHasRest> items (
+             new AST::TuplePatternItemsHasRest (std::move (patterns),
+                                                std::move (upper_patterns)));
            return std::unique_ptr<AST::TuplePattern> (
              new AST::TuplePattern (std::move (items), paren_locus));
          }
@@ -11326,9 +11326,9 @@ Parser<ManagedTokenSource>::parse_tuple_struct_items ()
       rust_debug (
        "finished parsing tuple struct items ranged (upper/none only)");
 
-      return std::unique_ptr<AST::TupleStructItemsRange> (
-       new AST::TupleStructItemsRange (std::move (lower_patterns),
-                                       std::move (upper_patterns)));
+      return std::unique_ptr<AST::TupleStructItemsHasRest> (
+       new AST::TupleStructItemsHasRest (std::move (lower_patterns),
+                                         std::move (upper_patterns)));
     }
 
   // has at least some lower patterns
@@ -11370,8 +11370,8 @@ Parser<ManagedTokenSource>::parse_tuple_struct_items ()
   switch (t->get_id ())
     {
     case RIGHT_PAREN:
-      return std::unique_ptr<AST::TupleStructItemsNoRange> (
-       new AST::TupleStructItemsNoRange (std::move (lower_patterns)));
+      return std::unique_ptr<AST::TupleStructItemsNoRest> (
+       new AST::TupleStructItemsNoRest (std::move (lower_patterns)));
     case DOT_DOT:
       {
        // has an upper range that must be parsed separately
@@ -11403,9 +11403,9 @@ Parser<ManagedTokenSource>::parse_tuple_struct_items ()
            t = lexer.peek_token ();
          }
 
-       return std::unique_ptr<AST::TupleStructItemsRange> (
-         new AST::TupleStructItemsRange (std::move (lower_patterns),
-                                         std::move (upper_patterns)));
+       return std::unique_ptr<AST::TupleStructItemsHasRest> (
+         new AST::TupleStructItemsHasRest (std::move (lower_patterns),
+                                           std::move (upper_patterns)));
       }
     default:
       // error
diff --git a/gcc/rust/resolve/rust-ast-resolve-base.cc 
b/gcc/rust/resolve/rust-ast-resolve-base.cc
index 3c7b425d79f..b0c2704883c 100644
--- a/gcc/rust/resolve/rust-ast-resolve-base.cc
+++ b/gcc/rust/resolve/rust-ast-resolve-base.cc
@@ -556,11 +556,11 @@ ResolverBase::visit (AST::StructPattern &)
 {}
 
 void
-ResolverBase::visit (AST::TupleStructItemsNoRange &)
+ResolverBase::visit (AST::TupleStructItemsNoRest &)
 {}
 
 void
-ResolverBase::visit (AST::TupleStructItemsRange &)
+ResolverBase::visit (AST::TupleStructItemsHasRest &)
 {}
 
 void
@@ -568,11 +568,11 @@ ResolverBase::visit (AST::TupleStructPattern &)
 {}
 
 void
-ResolverBase::visit (AST::TuplePatternItemsMultiple &)
+ResolverBase::visit (AST::TuplePatternItemsNoRest &)
 {}
 
 void
-ResolverBase::visit (AST::TuplePatternItemsRanged &)
+ResolverBase::visit (AST::TuplePatternItemsHasRest &)
 {}
 
 void
diff --git a/gcc/rust/resolve/rust-ast-resolve-base.h 
b/gcc/rust/resolve/rust-ast-resolve-base.h
index 89c5c35192e..efd59771c1b 100644
--- a/gcc/rust/resolve/rust-ast-resolve-base.h
+++ b/gcc/rust/resolve/rust-ast-resolve-base.h
@@ -178,12 +178,12 @@ public:
   void visit (AST::StructPatternFieldIdent &);
   void visit (AST::StructPattern &);
 
-  void visit (AST::TupleStructItemsNoRange &);
-  void visit (AST::TupleStructItemsRange &);
+  void visit (AST::TupleStructItemsNoRest &);
+  void visit (AST::TupleStructItemsHasRest &);
   void visit (AST::TupleStructPattern &);
 
-  void visit (AST::TuplePatternItemsMultiple &);
-  void visit (AST::TuplePatternItemsRanged &);
+  void visit (AST::TuplePatternItemsNoRest &);
+  void visit (AST::TuplePatternItemsHasRest &);
   void visit (AST::TuplePattern &);
   void visit (AST::GroupedPattern &);
   void visit (AST::SlicePatternItemsNoRest &);
diff --git a/gcc/rust/resolve/rust-ast-resolve-pattern.cc 
b/gcc/rust/resolve/rust-ast-resolve-pattern.cc
index cc633a9cc69..bb0ee74463c 100644
--- a/gcc/rust/resolve/rust-ast-resolve-pattern.cc
+++ b/gcc/rust/resolve/rust-ast-resolve-pattern.cc
@@ -99,19 +99,19 @@ PatternDeclaration::visit (AST::TupleStructPattern &pattern)
   AST::TupleStructItems &items = pattern.get_items ();
   switch (items.get_item_type ())
     {
-    case AST::TupleStructItems::RANGE:
+    case AST::TupleStructItems::HAS_REST:
       {
        // TODO
        rust_unreachable ();
       }
       break;
 
-    case AST::TupleStructItems::NO_RANGE:
+    case AST::TupleStructItems::NO_REST:
       {
-       auto &items_no_range
-         = static_cast<AST::TupleStructItemsNoRange &> (items);
+       auto &items_no_rest
+         = static_cast<AST::TupleStructItemsNoRest &> (items);
 
-       for (auto &inner_pattern : items_no_range.get_patterns ())
+       for (auto &inner_pattern : items_no_rest.get_patterns ())
          {
            inner_pattern->accept_vis (*this);
          }
@@ -168,22 +168,22 @@ void
 PatternDeclaration::visit (AST::TuplePattern &pattern)
 {
   auto &items = pattern.get_items ();
-  switch (items.get_pattern_type ())
+  switch (items.get_item_type ())
     {
-    case AST::TuplePatternItems::TuplePatternItemType::MULTIPLE:
+    case AST::TuplePatternItems::ItemType::NO_REST:
       {
-       auto &ref = static_cast<AST::TuplePatternItemsMultiple &> (
-         pattern.get_items ());
+       auto &ref
+         = static_cast<AST::TuplePatternItemsNoRest &> (pattern.get_items ());
 
        for (auto &p : ref.get_patterns ())
          p->accept_vis (*this);
       }
       break;
 
-    case AST::TuplePatternItems::TuplePatternItemType::RANGED:
+    case AST::TuplePatternItems::ItemType::HAS_REST:
       {
        auto &ref
-         = static_cast<AST::TuplePatternItemsRanged &> (pattern.get_items ());
+         = static_cast<AST::TuplePatternItemsHasRest &> (pattern.get_items ());
 
        for (auto &p : ref.get_lower_patterns ())
          p->accept_vis (*this);
@@ -388,9 +388,9 @@ void
 PatternDeclaration::visit (AST::SlicePattern &pattern)
 {
   auto &items = pattern.get_items ();
-  switch (items.get_pattern_type ())
+  switch (items.get_item_type ())
     {
-    case AST::SlicePatternItems::SlicePatternItemType::NO_REST:
+    case AST::SlicePatternItems::ItemType::NO_REST:
       {
        auto &ref
          = static_cast<AST::SlicePatternItemsNoRest &> (pattern.get_items ());
@@ -400,7 +400,7 @@ PatternDeclaration::visit (AST::SlicePattern &pattern)
       }
       break;
 
-    case AST::SlicePatternItems::SlicePatternItemType::HAS_REST:
+    case AST::SlicePatternItems::ItemType::HAS_REST:
       {
        auto &ref
          = static_cast<AST::SlicePatternItemsHasRest &> (pattern.get_items ());
diff --git a/gcc/rust/util/rust-attributes.cc b/gcc/rust/util/rust-attributes.cc
index 2d712526cda..8df7a82417b 100644
--- a/gcc/rust/util/rust-attributes.cc
+++ b/gcc/rust/util/rust-attributes.cc
@@ -944,11 +944,11 @@ AttributeChecker::visit (AST::StructPattern &)
 // void AttributeChecker::visit(TupleStructItems& ){}
 
 void
-AttributeChecker::visit (AST::TupleStructItemsNoRange &)
+AttributeChecker::visit (AST::TupleStructItemsNoRest &)
 {}
 
 void
-AttributeChecker::visit (AST::TupleStructItemsRange &)
+AttributeChecker::visit (AST::TupleStructItemsHasRest &)
 {}
 
 void
@@ -958,11 +958,11 @@ AttributeChecker::visit (AST::TupleStructPattern &)
 // void AttributeChecker::visit(TuplePatternItems& ){}
 
 void
-AttributeChecker::visit (AST::TuplePatternItemsMultiple &)
+AttributeChecker::visit (AST::TuplePatternItemsNoRest &)
 {}
 
 void
-AttributeChecker::visit (AST::TuplePatternItemsRanged &)
+AttributeChecker::visit (AST::TuplePatternItemsHasRest &)
 {}
 
 void
diff --git a/gcc/rust/util/rust-attributes.h b/gcc/rust/util/rust-attributes.h
index da3b0cd2581..45addf30508 100644
--- a/gcc/rust/util/rust-attributes.h
+++ b/gcc/rust/util/rust-attributes.h
@@ -244,12 +244,12 @@ private:
   void visit (AST::StructPatternFieldIdent &field) override;
   void visit (AST::StructPattern &pattern) override;
   // void visit(TupleStructItems& tuple_items) override;
-  void visit (AST::TupleStructItemsNoRange &tuple_items) override;
-  void visit (AST::TupleStructItemsRange &tuple_items) override;
+  void visit (AST::TupleStructItemsNoRest &tuple_items) override;
+  void visit (AST::TupleStructItemsHasRest &tuple_items) override;
   void visit (AST::TupleStructPattern &pattern) override;
   // void visit(TuplePatternItems& tuple_items) override;
-  void visit (AST::TuplePatternItemsMultiple &tuple_items) override;
-  void visit (AST::TuplePatternItemsRanged &tuple_items) override;
+  void visit (AST::TuplePatternItemsNoRest &tuple_items) override;
+  void visit (AST::TuplePatternItemsHasRest &tuple_items) override;
   void visit (AST::TuplePattern &pattern) override;
   void visit (AST::GroupedPattern &pattern) override;
   void visit (AST::SlicePattern &pattern) override;
-- 
2.50.1

Reply via email to