]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gccrs: ast: Add RestPattern AST node
authorPierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Tue, 28 Feb 2023 16:34:31 +0000 (17:34 +0100)
committerArthur Cohen <arthur.cohen@embecosm.com>
Tue, 16 Jan 2024 17:19:00 +0000 (18:19 +0100)
Add the RestPattern AST node representing ".." code in some rust
context. This commit also provides the different visitors for this node.

gcc/rust/ChangeLog:

* ast/rust-ast-dump.cc (Dump::visit): Add visitor.
* ast/rust-ast-dump.h: Add visitor prototype.
* ast/rust-ast-full-decls.h (class RestPattern): Add forward
declaration for class RestPattern.
* ast/rust-ast-visitor.h: Add visitor prototype.
* ast/rust-ast.cc (RestPattern::accept_vis): Add function to
accept a foreign visitor.
* ast/rust-pattern.h (class RestPattern): Add class RestPattern.
* checks/errors/rust-feature-gate.h: Add visitor prototype.
* expand/rust-attribute-visitor.cc (AttrVisitor::visit): Add
visitor implementation.
* expand/rust-attribute-visitor.h: Add visitor prototype.
* hir/rust-ast-lower-base.cc (ASTLoweringBase::visit): Add
visitor implementation.
* hir/rust-ast-lower-base.h: Add visitor prototype.
* resolve/rust-ast-resolve-base.cc (ResolverBase::visit): Add
visitor implementation.
* resolve/rust-ast-resolve-base.h: Add visitor prototype.
* resolve/rust-early-name-resolver.cc (EarlyNameResolver::visit):
Add visitor implementation.
* resolve/rust-early-name-resolver.h: Add visitor prototype.
* util/rust-attributes.cc (AttributeChecker::visit): Add visitor
implementation.
* util/rust-attributes.h: Add visitor prototype.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
17 files changed:
gcc/rust/ast/rust-ast-dump.cc
gcc/rust/ast/rust-ast-dump.h
gcc/rust/ast/rust-ast-full-decls.h
gcc/rust/ast/rust-ast-visitor.h
gcc/rust/ast/rust-ast.cc
gcc/rust/ast/rust-pattern.h
gcc/rust/checks/errors/rust-feature-gate.h
gcc/rust/expand/rust-attribute-visitor.cc
gcc/rust/expand/rust-attribute-visitor.h
gcc/rust/hir/rust-ast-lower-base.cc
gcc/rust/hir/rust-ast-lower-base.h
gcc/rust/resolve/rust-ast-resolve-base.cc
gcc/rust/resolve/rust-ast-resolve-base.h
gcc/rust/resolve/rust-early-name-resolver.cc
gcc/rust/resolve/rust-early-name-resolver.h
gcc/rust/util/rust-attributes.cc
gcc/rust/util/rust-attributes.h

index 97056c68bfdbd16d8904a50621dab9f1b62a0e95..f6191088604291dc1e6421006916773be7e78f92 100644 (file)
@@ -1610,6 +1610,10 @@ void
 Dump::visit (WildcardPattern &)
 {}
 
+void
+Dump::visit (RestPattern &)
+{}
+
 // void Dump::visit(RangePatternBound& ){}
 
 void
index a6adab9990f00929c55817f13b131c07a57814c4..50c9e91772b3a1a7a8e19ef17bb51cd3f779653a 100644 (file)
@@ -273,6 +273,7 @@ private:
   void visit (LiteralPattern &pattern);
   void visit (IdentifierPattern &pattern);
   void visit (WildcardPattern &pattern);
+  void visit (RestPattern &pattern);
   // void visit(RangePatternBound& bound);
   void visit (RangePatternBoundLiteral &bound);
   void visit (RangePatternBoundPath &bound);
index 352c1b97c4e8ebd9c88a5137186a939065ac586d..5a85646880bfdbdd633268423022aef7bfe98ba3 100644 (file)
@@ -228,6 +228,7 @@ class MetaListNameValueStr;
 class LiteralPattern;
 class IdentifierPattern;
 class WildcardPattern;
+class RestPattern;
 class RangePatternBound;
 class RangePatternBoundLiteral;
 class RangePatternBoundPath;
index 776e1e281f2242806a8f025183ecaa0bd89316eb..6990d6144864127272c2619c2359fbcf5c24f404 100644 (file)
@@ -183,6 +183,7 @@ public:
   virtual void visit (LiteralPattern &pattern) = 0;
   virtual void visit (IdentifierPattern &pattern) = 0;
   virtual void visit (WildcardPattern &pattern) = 0;
+  virtual void visit (RestPattern &pattern) = 0;
   // virtual void visit(RangePatternBound& bound) = 0;
   virtual void visit (RangePatternBoundLiteral &bound) = 0;
   virtual void visit (RangePatternBoundPath &bound) = 0;
index 13d31cf63d47b873c165cd95d9e6fe9563bc6d9a..6572a3ed256d3e7ec1329fced38edad1ebc1ec5b 100644 (file)
@@ -5574,6 +5574,12 @@ WildcardPattern::accept_vis (ASTVisitor &vis)
   vis.visit (*this);
 }
 
+void
+RestPattern::accept_vis (ASTVisitor &vis)
+{
+  vis.visit (*this);
+}
+
 void
 RangePatternBoundLiteral::accept_vis (ASTVisitor &vis)
 {
index 1fcd818c2d87d1a61141668afb081b6b5528d790..0f6cf8fc61740bb053891f741f939abd0ed4b8be 100644 (file)
@@ -191,6 +191,20 @@ protected:
   }
 };
 
+class RestPattern : public Pattern
+{
+  Location locus;
+
+public:
+  std::string as_string () const override { return ".."; }
+
+  RestPattern (Location locus) : locus (locus) {}
+
+  Location get_locus () const override final { return locus; }
+
+  void accept_vis (ASTVisitor &vis) override;
+};
+
 // Base range pattern bound (lower or upper limit) - abstract
 class RangePatternBound
 {
index 0adc4c07d126e8435934c6414111fc39c5e3774f..a112085b1f606a7ffd167b9e95f85ba2c0ea50f8 100644 (file)
@@ -151,6 +151,7 @@ public:
   void visit (AST::LiteralPattern &pattern) override {}
   void visit (AST::IdentifierPattern &pattern) override {}
   void visit (AST::WildcardPattern &pattern) override {}
+  void visit (AST::RestPattern &pattern) override {}
   void visit (AST::RangePatternBoundLiteral &bound) override {}
   void visit (AST::RangePatternBoundPath &bound) override {}
   void visit (AST::RangePatternBoundQualPath &bound) override {}
index ae653bd741da020df20b4797aa23c54e1a6e7d01..3b3bb3a17ebd3cbd763d711409566d28c8f06b2b 100644 (file)
@@ -2937,6 +2937,11 @@ AttrVisitor::visit (AST::WildcardPattern &)
   // not possible
 }
 void
+AttrVisitor::visit (AST::RestPattern &)
+{
+  // not possible
+}
+void
 AttrVisitor::visit (AST::RangePatternBoundLiteral &)
 {
   // not possible
index 1b8546e746aa836b013adee4eabd0e8750f24918..26f7acc417f758d8b44ab3c3a87f8d75546375c8 100644 (file)
@@ -242,6 +242,7 @@ public:
   void visit (AST::LiteralPattern &) override;
   void visit (AST::IdentifierPattern &pattern) override;
   void visit (AST::WildcardPattern &) override;
+  void visit (AST::RestPattern &) override;
   void visit (AST::RangePatternBoundLiteral &) override;
   void visit (AST::RangePatternBoundPath &bound) override;
   void visit (AST::RangePatternBoundQualPath &bound) override;
index 7b0c48f84c2cc7204a7666a3821b33e0f1a9d3c6..900d2eb2f136af2aa0c8c4d472ad83f8bf62ec78 100644 (file)
@@ -409,6 +409,9 @@ ASTLoweringBase::visit (AST::IdentifierPattern &)
 void
 ASTLoweringBase::visit (AST::WildcardPattern &)
 {}
+void
+ASTLoweringBase::visit (AST::RestPattern &)
+{}
 //  void ASTLoweringBase::visit(RangePatternBoundbound) {}
 void
 ASTLoweringBase::visit (AST::RangePatternBoundLiteral &)
index 95d75d1acb53bbe30a55cd22aa7fac6daa9e0556..aeb21b20efcee5153a0a47a5294f073a288d9f6b 100644 (file)
@@ -211,6 +211,7 @@ public:
   virtual void visit (AST::LiteralPattern &pattern);
   virtual void visit (AST::IdentifierPattern &pattern);
   virtual void visit (AST::WildcardPattern &pattern);
+  virtual void visit (AST::RestPattern &pattern);
   //  virtual void visit(RangePatternBound& bound);
   virtual void visit (AST::RangePatternBoundLiteral &bound);
   virtual void visit (AST::RangePatternBoundPath &bound);
index 7bc98027cbf9175c207e546ffba2061b4ec6d1f0..cc09f0cc664f8c88f237cf53db57210f5c471957 100644 (file)
@@ -518,6 +518,10 @@ void
 ResolverBase::visit (AST::WildcardPattern &)
 {}
 
+void
+ResolverBase::visit (AST::RestPattern &)
+{}
+
 void
 ResolverBase::visit (AST::RangePatternBoundLiteral &)
 {}
index f4de7c628ae6baef8729e1485d181233d421ebe8..24103c9109fc37a6ee0e839fd91c4df520b33e8c 100644 (file)
@@ -158,6 +158,7 @@ public:
   void visit (AST::LiteralPattern &);
   void visit (AST::IdentifierPattern &);
   void visit (AST::WildcardPattern &);
+  void visit (AST::RestPattern &);
 
   void visit (AST::RangePatternBoundLiteral &);
   void visit (AST::RangePatternBoundPath &);
index 4078586781c99ae29e612e710232af6fab5b90a1..6dc11c41bc4058261980d09aa03a944e3fbc14b5 100644 (file)
@@ -956,6 +956,10 @@ void
 EarlyNameResolver::visit (AST::WildcardPattern &)
 {}
 
+void
+EarlyNameResolver::visit (AST::RestPattern &)
+{}
+
 void
 EarlyNameResolver::visit (AST::RangePatternBoundLiteral &)
 {}
index 7390cb17f65f5e0926a1d6cdc15cdebca8b9f17b..39287ec0f26e7d5561cc58293f9d13bc1d50f9f9 100644 (file)
@@ -233,6 +233,7 @@ private:
   virtual void visit (AST::LiteralPattern &pattern);
   virtual void visit (AST::IdentifierPattern &pattern);
   virtual void visit (AST::WildcardPattern &pattern);
+  virtual void visit (AST::RestPattern &pattern);
   virtual void visit (AST::RangePatternBoundLiteral &bound);
   virtual void visit (AST::RangePatternBoundPath &bound);
   virtual void visit (AST::RangePatternBoundQualPath &bound);
index 4ef1ea05afc15741e4c3e4d37a634d6f731b1e20..55f3aa21ef6337bc20b29c75925e08beb4cb4d69 100644 (file)
@@ -695,6 +695,10 @@ void
 AttributeChecker::visit (AST::WildcardPattern &)
 {}
 
+void
+AttributeChecker::visit (AST::RestPattern &)
+{}
+
 // void AttributeChecker::visit(RangePatternBound& ){}
 
 void
index cc01afcbb7f7688f26dc53f54a2c10e80209bf22..bef6127ee10178147eedad4d6b766bcb3ed0b4cd 100644 (file)
@@ -222,6 +222,7 @@ private:
   void visit (AST::LiteralPattern &pattern);
   void visit (AST::IdentifierPattern &pattern);
   void visit (AST::WildcardPattern &pattern);
+  void visit (AST::RestPattern &pattern);
   // void visit(RangePatternBound& bound);
   void visit (AST::RangePatternBoundLiteral &bound);
   void visit (AST::RangePatternBoundPath &bound);