Skip to content

Commit ee61e89

Browse files
committed
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>
1 parent 38b9134 commit ee61e89

File tree

4 files changed

+20
-28
lines changed

4 files changed

+20
-28
lines changed

gcc/rust/ast/rust-ast-visitor.cc

+10-2
Original file line numberDiff line numberDiff line change
@@ -831,6 +831,13 @@ DefaultASTVisitor::visit (AST::UseDeclaration &use_decl)
831831
visit (use_decl.get_tree ());
832832
}
833833

834+
void
835+
DefaultASTVisitor::visit_function_params (AST::Function &function)
836+
{
837+
for (auto &param : function.get_function_params ())
838+
visit (param);
839+
}
840+
834841
void
835842
DefaultASTVisitor::visit (AST::Function &function)
836843
{
@@ -839,8 +846,9 @@ DefaultASTVisitor::visit (AST::Function &function)
839846
visit (function.get_qualifiers ());
840847
for (auto &generic : function.get_generic_params ())
841848
visit (generic);
842-
for (auto &param : function.get_function_params ())
843-
visit (param);
849+
850+
visit_function_params (function);
851+
844852
if (function.has_return_type ())
845853
visit (function.get_return_type ());
846854
if (function.has_where_clause ())

gcc/rust/ast/rust-ast-visitor.h

+2
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,8 @@ class ASTVisitor
242242
class DefaultASTVisitor : public ASTVisitor
243243
{
244244
public:
245+
virtual void visit_function_params (AST::Function &function);
246+
245247
virtual void visit (AST::Crate &crate);
246248

247249
virtual void visit (AST::Token &tok) override;

gcc/rust/resolve/rust-late-name-resolver-2.0.cc

+5-25
Original file line numberDiff line numberDiff line change
@@ -266,34 +266,14 @@ Late::visit (AST::AltPattern &pattern)
266266
}
267267

268268
void
269-
Late::visit (AST::Function &function)
269+
Late::visit_function_params (AST::Function &function)
270270
{
271-
auto def_fn = [this, &function] () {
272-
visit_outer_attrs (function);
273-
visit (function.get_visibility ());
274-
visit (function.get_qualifiers ());
275-
for (auto &generic : function.get_generic_params ())
276-
visit (generic);
277-
278-
// We only care about params
279-
ctx.bindings.enter (BindingSource::Param);
280-
281-
for (auto &param : function.get_function_params ())
282-
visit (param);
283-
284-
ctx.bindings.exit ();
285-
286-
// Back to regular visit
271+
ctx.bindings.enter (BindingSource::Param);
287272

288-
if (function.has_return_type ())
289-
visit (function.get_return_type ());
290-
if (function.has_where_clause ())
291-
visit (function.get_where_clause ());
292-
if (function.has_body ())
293-
visit (*function.get_definition ());
294-
};
273+
for (auto &param : function.get_function_params ())
274+
visit (param);
295275

296-
ctx.scoped (Rib::Kind::Function, function.get_node_id (), def_fn);
276+
ctx.bindings.exit ();
297277
}
298278

299279
void

gcc/rust/resolve/rust-late-name-resolver-2.0.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,16 @@ class Late : public DefaultResolver
3737

3838
void new_label (Identifier name, NodeId id);
3939

40+
// Specialized visit bits
41+
void visit_function_params (AST::Function &function) override;
42+
4043
// some more label declarations
4144
void visit (AST::LetStmt &) override;
4245
// TODO: Do we need this?
4346
// void visit (AST::Method &) override;
4447
void visit (AST::IdentifierPattern &) override;
4548
void visit (AST::StructPatternFieldIdent &) override;
4649
void visit (AST::AltPattern &) override;
47-
void visit (AST::Function &) override;
4850
void visit (AST::SelfParam &) override;
4951
void visit (AST::MatchArm &) override;
5052
void visit (AST::ForLoopExpr &) override;

0 commit comments

Comments
 (0)