]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gccrs: Refactor AST Patterns that hold multiple pattern items
authorYap Zhi Heng <yapzhhg@gmail.com>
Sun, 24 Aug 2025 13:18:12 +0000 (21:18 +0800)
committerArthur Cohen <arthur.cohen@embecosm.com>
Thu, 30 Oct 2025 19:58:44 +0000 (20:58 +0100)
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 <yapzhhg@gmail.com>
29 files changed:
gcc/rust/ast/rust-ast-collector.cc
gcc/rust/ast/rust-ast-collector.h
gcc/rust/ast/rust-ast-full-decls.h
gcc/rust/ast/rust-ast-visitor.cc
gcc/rust/ast/rust-ast-visitor.h
gcc/rust/ast/rust-desugar-for-loops.cc
gcc/rust/ast/rust-desugar-question-mark.cc
gcc/rust/ast/rust-pattern.cc
gcc/rust/ast/rust-pattern.h
gcc/rust/expand/rust-cfg-strip.cc
gcc/rust/expand/rust-cfg-strip.h
gcc/rust/expand/rust-derive-clone.cc
gcc/rust/expand/rust-derive-cmp-common.cc
gcc/rust/expand/rust-derive-hash.cc
gcc/rust/expand/rust-derive-ord.cc
gcc/rust/expand/rust-derive-partial-eq.cc
gcc/rust/expand/rust-derive.h
gcc/rust/expand/rust-expand-visitor.cc
gcc/rust/expand/rust-expand-visitor.h
gcc/rust/hir/rust-ast-lower-base.cc
gcc/rust/hir/rust-ast-lower-base.h
gcc/rust/hir/rust-ast-lower-pattern.cc
gcc/rust/hir/tree/rust-hir-pattern.h
gcc/rust/parse/rust-parse-impl.h
gcc/rust/resolve/rust-ast-resolve-base.cc
gcc/rust/resolve/rust-ast-resolve-base.h
gcc/rust/resolve/rust-ast-resolve-pattern.cc
gcc/rust/util/rust-attributes.cc
gcc/rust/util/rust-attributes.h

index 2854525d121ccdefab2cd9e47c694e49530de4bc..685992c478169e38b099266b9521f255b2bebb49 100644 (file)
@@ -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 ())
     {
index d3ab18a3d10e15a4ced4633e97924d0c7e268fc8..6f414e86e9961040b865bc6d913219423eb632f7 100644 (file)
@@ -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);
index 09706cecf2c69bef329a792ba07bfcca1669f697..b646cdf078ce8311e5ac09ef19491ec85934badd 100644 (file)
@@ -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;
index ab8cdbe4510eb8742fc5869df95041bc0406efb1..cf1bbe3b3cf3cf53d02a95e1f5d11d6959d1e9cc 100644 (file)
@@ -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);
index 2d81aa1908f3d9bafda9cf6d6433eb887d7158cb..a6b4fe83b0babd07ee52682efc041df8bdc94532 100644 (file)
@@ -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;
index 5cc1c19ec1460a222af3bf4c61c56e9d0ed1bdc2..9a12423405581170cad3c00598602d7aa474b01d 100644 (file)
@@ -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)));
index 01400d834b07f8de538198ed258d03f84cc4d430..20a490396450ef20a3341e24d7a655e941bda0a1 100644 (file)
@@ -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)));
index 15ab0b75741db364d7bce8a8e3fd80ac466cd53b..ebe872402ea8585376c3b341b3071c7fdbee8230 100644 (file)
@@ -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);
 }
index 029a5b36c6a780f9067b77c9dff264a9f540f147..e66a733f33bda2062f4ea55e5cabbc1b390907e9 100644 (file)
@@ -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);
   }
index 8a1cf787a0a6dbc73732c3bc9e7321c6a84f460c..d45f7558948b55e5bfc524cf12e8a0632a942dac 100644 (file)
@@ -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);
 
index 75c50471924937dcbdc7433aaf0f0f3f88c3c51d..9d6a6d83ad42220d21730ff8eb7b9766ebfab797 100644 (file)
@@ -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;
index 5987d14db8a0dbc10c412b5ee0fbf37cbdca0ccd..27dcc66ee3f0c2d53469bb82da4c9c6ca86eeffc 100644 (file)
@@ -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 (
index 22ca16f17729f72a8af75136e9f5d204b9d0b213..9890bb734ef818c99034ea1fd1dd940c12723a98 100644 (file)
@@ -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
index 94aede2fe030a81923a318e43d46416e7e0451e2..616bfdb71d3eb6a1f2003638e4cfdaec3932c5bd 100644 (file)
@@ -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))),
index afc4b71676a145b4de6a64c36175071f8a74c837..6f3981fd7dfd6182cf671591152ce469fa55f71d 100644 (file)
@@ -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 (
index a0bf87a32ddbed573d83e656a36684499b32afd0..287d8a77055b4e4cb42083069c066c0337f7516d 100644 (file)
@@ -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);
index 10c146ca3efd6abd4da1b00968cda1e5585985f3..0e066cab5396e7c907b7811f5e0f1905f90fd3db 100644 (file)
@@ -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
index c1833c276c5a30bebd9fbce986ef15cc5bc8c945..da9b39cbe32c5f0721e5bccc8362ccfb6cd69ade 100644 (file)
@@ -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);
index 8fee291d595990ab3496bbe18b41a5f2a31edc1f..677adeae86fd19da8659c2bc08b0449d3c0d04af 100644 (file)
@@ -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;
index e32918e8e85b9673c37d8d62ef0f2c9e877cc435..f3faee652ba76a3edb2d276c22645e5941af7181 100644 (file)
@@ -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 ());
index a188e1785268ffda7a46a4758f5fdbe677cd4e6c..e720fc9b210351d1e08f3ba9fa8a5741377aeff2 100644 (file)
@@ -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);
index 6933c2dca834e2515d25bac75b2523723eed3cae..a209f80f4dad6c9d64d244eff297c4ca1679ab6b 100644 (file)
@@ -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 ());
index e3581dc5c8c8c0634b7ddb7a08c52f6e5d9f144f..e954aec309fab3235f3976ed78b2f0abd821b8c4 100644 (file)
@@ -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 ());
   }
index eef3b2f1592cc23e64407415954b87068a6b9578..9b38396e95c2a0cf1162681cc83c706e7c549895 100644 (file)
@@ -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
index 3c7b425d79ffb8866d67051ead8f6f86c7aab399..b0c2704883c151287ebb2ab153a91d833d38bfc4 100644 (file)
@@ -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
index 89c5c35192e3f8318815fd9bd3376400dec5da8b..efd59771c1bcbcf89d60fe0308768573e2f155a3 100644 (file)
@@ -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 &);
index cc633a9cc692deb814a01f2564eb3cd236286fad..bb0ee74463ca9d6db3e3d7db443960c95abb1052 100644 (file)
@@ -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 ());
index 2d712526cda936b9cc75d883e6d47cc3ffc8e259..8df7a82417b8e5ddf333c40d4e45dca4f646248d 100644 (file)
@@ -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
index da3b0cd25810b5a263725d883040622831e40328..45addf30508772da1153e0c13b26a61fec391234 100644 (file)
@@ -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;