[COMMITTED,057/101] gccrs: Make feature gate visitor inherit from default one

Message ID 20240130121026.807464-60-arthur.cohen@embecosm.com
State Committed
Commit 9f6d3010047d417f54c439db42f111fa61b216df
Headers
Series [COMMITTED,001/101] gccrs: Add visibility to trait item |

Commit Message

Arthur Cohen Jan. 30, 2024, 12:07 p.m. UTC
  From: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>

The feature gating behavior may be shortened and kept cleaner using the
default visitor. This means less maintenance on visit functions as the
traversal is shared by multiple visitors.

gcc/rust/ChangeLog:

	* checks/errors/rust-feature-gate.cc (FeatureGate::visit): Add a visit
	function for the crate level.
	(FeatureGate::check): Add call to crate visit.
	* checks/errors/rust-feature-gate.h (class FeatureGate): Remove now
	useless visit functions (traversal only).

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
---
 gcc/rust/checks/errors/rust-feature-gate.cc | 37 +++++----------------
 gcc/rust/checks/errors/rust-feature-gate.h  |  7 ++--
 2 files changed, 13 insertions(+), 31 deletions(-)
  

Patch

diff --git a/gcc/rust/checks/errors/rust-feature-gate.cc b/gcc/rust/checks/errors/rust-feature-gate.cc
index a531d0370f0..3c943022f05 100644
--- a/gcc/rust/checks/errors/rust-feature-gate.cc
+++ b/gcc/rust/checks/errors/rust-feature-gate.cc
@@ -18,11 +18,18 @@ 
 
 #include "rust-feature-gate.h"
 #include "rust-abi.h"
+#include "rust-ast-visitor.h"
 
 namespace Rust {
 
 void
 FeatureGate::check (AST::Crate &crate)
+{
+  visit (crate);
+}
+
+void
+FeatureGate::visit (AST::Crate &crate)
 {
   valid_features.clear ();
 
@@ -56,12 +63,7 @@  FeatureGate::check (AST::Crate &crate)
 	}
     }
 
-  auto &items = crate.items;
-  for (auto it = items.begin (); it != items.end (); it++)
-    {
-      auto &item = *it;
-      item->accept_vis (*this);
-    }
+  AST::DefaultASTVisitor::visit (crate);
 }
 
 void
@@ -103,10 +105,7 @@  FeatureGate::visit (AST::ExternBlock &block)
 	gate (Feature::Name::INTRINSICS, block.get_locus (),
 	      "intrinsics are subject to change");
     }
-  for (const auto &item : block.get_extern_items ())
-    {
-      item->accept_vis (*this);
-    }
+  AST::DefaultASTVisitor::visit (block);
 }
 
 void
@@ -129,24 +128,6 @@  FeatureGate::visit (AST::MacroRulesDefinition &rules_def)
   check_rustc_attri (rules_def.get_outer_attrs ());
 }
 
-void
-FeatureGate::visit (AST::InherentImpl &impl)
-{
-  for (const auto &item : impl.get_impl_items ())
-    {
-      item->accept_vis (*this);
-    }
-}
-
-void
-FeatureGate::visit (AST::TraitImpl &impl)
-{
-  for (const auto &item : impl.get_impl_items ())
-    {
-      item->accept_vis (*this);
-    }
-}
-
 void
 FeatureGate::visit (AST::Function &function)
 {
diff --git a/gcc/rust/checks/errors/rust-feature-gate.h b/gcc/rust/checks/errors/rust-feature-gate.h
index 1ebd3c9e05f..8d1a26a1361 100644
--- a/gcc/rust/checks/errors/rust-feature-gate.h
+++ b/gcc/rust/checks/errors/rust-feature-gate.h
@@ -25,12 +25,15 @@ 
 
 namespace Rust {
 
-class FeatureGate : public AST::ASTVisitor
+class FeatureGate : public AST::DefaultASTVisitor
 {
 public:
   FeatureGate () {}
 
+  using AST::DefaultASTVisitor::visit;
+
   void check (AST::Crate &crate);
+  void visit (AST::Crate &crate) override;
 
   void visit (AST::Token &tok) override {}
   void visit (AST::DelimTokenTree &delim_tok_tree) override {}
@@ -127,8 +130,6 @@  public:
   void visit (AST::TraitItemConst &item) override {}
   void visit (AST::TraitItemType &item) override {}
   void visit (AST::Trait &trait) override {}
-  void visit (AST::InherentImpl &impl) override;
-  void visit (AST::TraitImpl &impl) override;
   void visit (AST::ExternalTypeItem &item) override;
   void visit (AST::ExternalStaticItem &item) override {}
   void visit (AST::ExternalFunctionItem &item) override {}