diff options
author | Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com> | 2025-04-19 14:14:25 +0200 |
---|---|---|
committer | P-E-P <32375388+P-E-P@users.noreply.github.com> | 2025-04-24 16:53:44 +0000 |
commit | ee61e8917f0057e271177c5ad2e5a4a7c3ccdbaa (patch) | |
tree | ab1f4745f70f56aaad3fc293870f74a4676ac8fb /gcc | |
parent | 38b913483fed6fe36fd5b692948ec9cf7ac2415c (diff) | |
download | gcc-ee61e8917f0057e271177c5ad2e5a4a7c3ccdbaa.zip gcc-ee61e8917f0057e271177c5ad2e5a4a7c3ccdbaa.tar.gz gcc-ee61e8917f0057e271177c5ad2e5a4a7c3ccdbaa.tar.bz2 |
Use specialized param visit function for params
This commit introduce a new public function to visit function parameters
in the default visitor. It allows visitors derived from DefaultVisitor
to override only a small part of the default visitor.
gcc/rust/ChangeLog:
* ast/rust-ast-visitor.cc (DefaultASTVisitor::visit_function_params):
Add specialized function to visit function parameters.
(DefaultASTVisitor::visit): Remove parameter visit and call specialized
function instead.
* ast/rust-ast-visitor.h: Add function prototye.
* resolve/rust-late-name-resolver-2.0.cc (Late::visit): Remove
function.
(Late::visit_function_params): Override specialized visit function.
* resolve/rust-late-name-resolver-2.0.h: Add overriden function
prototype.
Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/rust/ast/rust-ast-visitor.cc | 12 | ||||
-rw-r--r-- | gcc/rust/ast/rust-ast-visitor.h | 2 | ||||
-rw-r--r-- | gcc/rust/resolve/rust-late-name-resolver-2.0.cc | 30 | ||||
-rw-r--r-- | gcc/rust/resolve/rust-late-name-resolver-2.0.h | 4 |
4 files changed, 20 insertions, 28 deletions
diff --git a/gcc/rust/ast/rust-ast-visitor.cc b/gcc/rust/ast/rust-ast-visitor.cc index 70580ac..563bf7d 100644 --- a/gcc/rust/ast/rust-ast-visitor.cc +++ b/gcc/rust/ast/rust-ast-visitor.cc @@ -832,6 +832,13 @@ DefaultASTVisitor::visit (AST::UseDeclaration &use_decl) } void +DefaultASTVisitor::visit_function_params (AST::Function &function) +{ + for (auto ¶m : function.get_function_params ()) + visit (param); +} + +void DefaultASTVisitor::visit (AST::Function &function) { visit_outer_attrs (function); @@ -839,8 +846,9 @@ DefaultASTVisitor::visit (AST::Function &function) visit (function.get_qualifiers ()); for (auto &generic : function.get_generic_params ()) visit (generic); - for (auto ¶m : function.get_function_params ()) - visit (param); + + visit_function_params (function); + if (function.has_return_type ()) visit (function.get_return_type ()); if (function.has_where_clause ()) diff --git a/gcc/rust/ast/rust-ast-visitor.h b/gcc/rust/ast/rust-ast-visitor.h index 50cf1bf..dca8cbc 100644 --- a/gcc/rust/ast/rust-ast-visitor.h +++ b/gcc/rust/ast/rust-ast-visitor.h @@ -242,6 +242,8 @@ public: class DefaultASTVisitor : public ASTVisitor { public: + virtual void visit_function_params (AST::Function &function); + virtual void visit (AST::Crate &crate); virtual void visit (AST::Token &tok) override; diff --git a/gcc/rust/resolve/rust-late-name-resolver-2.0.cc b/gcc/rust/resolve/rust-late-name-resolver-2.0.cc index 5ee3fa2..5f215db 100644 --- a/gcc/rust/resolve/rust-late-name-resolver-2.0.cc +++ b/gcc/rust/resolve/rust-late-name-resolver-2.0.cc @@ -266,34 +266,14 @@ Late::visit (AST::AltPattern &pattern) } void -Late::visit (AST::Function &function) +Late::visit_function_params (AST::Function &function) { - auto def_fn = [this, &function] () { - visit_outer_attrs (function); - visit (function.get_visibility ()); - visit (function.get_qualifiers ()); - for (auto &generic : function.get_generic_params ()) - visit (generic); - - // We only care about params - ctx.bindings.enter (BindingSource::Param); - - for (auto ¶m : function.get_function_params ()) - visit (param); - - ctx.bindings.exit (); - - // Back to regular visit + ctx.bindings.enter (BindingSource::Param); - if (function.has_return_type ()) - visit (function.get_return_type ()); - if (function.has_where_clause ()) - visit (function.get_where_clause ()); - if (function.has_body ()) - visit (*function.get_definition ()); - }; + for (auto ¶m : function.get_function_params ()) + visit (param); - ctx.scoped (Rib::Kind::Function, function.get_node_id (), def_fn); + ctx.bindings.exit (); } void diff --git a/gcc/rust/resolve/rust-late-name-resolver-2.0.h b/gcc/rust/resolve/rust-late-name-resolver-2.0.h index 90113f2..896b72c 100644 --- a/gcc/rust/resolve/rust-late-name-resolver-2.0.h +++ b/gcc/rust/resolve/rust-late-name-resolver-2.0.h @@ -37,6 +37,9 @@ public: void new_label (Identifier name, NodeId id); + // Specialized visit bits + void visit_function_params (AST::Function &function) override; + // some more label declarations void visit (AST::LetStmt &) override; // TODO: Do we need this? @@ -44,7 +47,6 @@ public: void visit (AST::IdentifierPattern &) override; void visit (AST::StructPatternFieldIdent &) override; void visit (AST::AltPattern &) override; - void visit (AST::Function &) override; void visit (AST::SelfParam &) override; void visit (AST::MatchArm &) override; void visit (AST::ForLoopExpr &) override; |