]> git.ipfire.org Git - people/ms/gcc.git/commitdiff
ast: Add RestPattern AST node
authorPierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Tue, 28 Feb 2023 16:34:31 +0000 (17:34 +0100)
committerPhilip Herron <philip.herron@embecosm.com>
Tue, 28 Feb 2023 22:37:17 +0000 (22:37 +0000)
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 1cfcebbab9df0239e3b51f987142e695f8b5c163..9315bc5292d43defe90dd89825184f347a1947b1 100644 (file)
@@ -1610,6 +1610,10 @@ void
 Dump::visit (WildcardPattern &)
 {}
 
+void
+Dump::visit (RestPattern &)
+{}
+
 // void Dump::visit(RangePatternBound& ){}
 
 void
index c0082aa8314b652c5fb73f7727322b6bd607b48e..b68619d286207776abc02e3fce134ad22b7546e7 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 0514eecec06498a9d81f89cacf198c50edc88499..eafc82f482037aa3039e4b5d42d4541ccc93f3b0 100644 (file)
@@ -228,6 +228,7 @@ class MetaListNameValueStr;
 class LiteralPattern;
 class IdentifierPattern;
 class WildcardPattern;
+class RestPattern;
 class RangePatternBound;
 class RangePatternBoundLiteral;
 class RangePatternBoundPath;
index d60a68691acfc7daa15c22749f13d72d7a4d1963..c0a5b995d7be94e58616b88cc9f7f97fa643955f 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 b67a5390f2f5a7ab3c05edde0a08c20847211968..3d1b573968f0171f02f0b5b0d428bb6d78b95a03 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 a62e9b98d9340bba0d2a1e410e55dc2f939876be..ac0bd26f84a7994b939be73204cc7253a9d8075b 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 22c1501cef69e4725b0b5d4fda20512036874fa4..0262903f12354b64bd2fdd86f8829a2d5d727f61 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 ce93986003d7856f8cdb969abee3ca09bbbeeacc..d416505eeafa634e80bbf3d95c0655f1026154f1 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 a7ab42e47ec3e179857f55e339e02a1dc79643d3..ceada6039a5f67ad54ab1edc6df96287e5946409 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 1651b00b05f255b69c00a0c98198ed7620420e71..c21f511dc8d5d64eece70af860d2c118a30a537e 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 60ed3a964d9e0c2472e6d5f833ddcba3a18534ef..d0171a54e2e2019d6aec17763b077a165f48c0cb 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 2f82f911922a4105ff957fca22a0c2b8c473ffe0..2667a246561077b058ed91f9eb4eb82374997048 100644 (file)
@@ -518,6 +518,10 @@ void
 ResolverBase::visit (AST::WildcardPattern &)
 {}
 
+void
+ResolverBase::visit (AST::RestPattern &)
+{}
+
 void
 ResolverBase::visit (AST::RangePatternBoundLiteral &)
 {}
index 994f61e92b8a3e301d7b112223f7747023b3904f..df70303a6eb9df89e925e3609a689668628ee7fd 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 584d430a0146689a37f2e6a1022e1418e14519ae..10f7626dc7f4eff7d2e73c308944c973f66ed1d5 100644 (file)
@@ -956,6 +956,10 @@ void
 EarlyNameResolver::visit (AST::WildcardPattern &)
 {}
 
+void
+EarlyNameResolver::visit (AST::RestPattern &)
+{}
+
 void
 EarlyNameResolver::visit (AST::RangePatternBoundLiteral &)
 {}
index 4f51533131a065eed69073f5f23d69a0d0a17f0c..c94a77501a3568830e3f268816c41c0539015a7c 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 ccabeb8f345bd651e47348235850393a08d88bf3..6df00ad95beea06734a25d06e2f6e04164a482b2 100644 (file)
@@ -695,6 +695,10 @@ void
 AttributeChecker::visit (AST::WildcardPattern &)
 {}
 
+void
+AttributeChecker::visit (AST::RestPattern &)
+{}
+
 // void AttributeChecker::visit(RangePatternBound& ){}
 
 void
index 39961bd153501d354fa0f5d5c8fd5c401f5bc9ce..a9c8a33b690be43b6f2d43a3b13a053113a89ef1 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);