aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/rust/ast/rust-ast-visitor.cc12
-rw-r--r--gcc/rust/ast/rust-ast-visitor.h2
-rw-r--r--gcc/rust/resolve/rust-late-name-resolver-2.0.cc30
-rw-r--r--gcc/rust/resolve/rust-late-name-resolver-2.0.h4
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 &param : 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 &param : 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 &param : 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 &param : 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;