aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>2025-01-24 16:02:10 +0100
committerP-E-P <32375388+P-E-P@users.noreply.github.com>2025-01-24 16:31:36 +0000
commit98d89d58d7c6b25fc6e29735c3b6d051fd45ae8a (patch)
tree6a2a046cd0f9417fda1fa2ca083dbcc14f172071 /gcc
parent2b473162d33e0f3fe31a7f098c745cb388a01aa4 (diff)
downloadgcc-98d89d58d7c6b25fc6e29735c3b6d051fd45ae8a.zip
gcc-98d89d58d7c6b25fc6e29735c3b6d051fd45ae8a.tar.gz
gcc-98d89d58d7c6b25fc6e29735c3b6d051fd45ae8a.tar.bz2
Add captures for ClosureExprInnerTyped with nr2
Captures were only processed for regular ClosureExprInner. gcc/rust/ChangeLog: * resolve/rust-late-name-resolver-2.0.cc (Late::visit): Add ClosureExprInnerTyped visit implementation. (add_captures): Add a function to avoid code duplication. * resolve/rust-late-name-resolver-2.0.h: Add function prototype. Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Diffstat (limited to 'gcc')
-rw-r--r--gcc/rust/resolve/rust-late-name-resolver-2.0.cc17
-rw-r--r--gcc/rust/resolve/rust-late-name-resolver-2.0.h1
2 files changed, 16 insertions, 2 deletions
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 1e7f9f1..b0364d1 100644
--- a/gcc/rust/resolve/rust-late-name-resolver-2.0.cc
+++ b/gcc/rust/resolve/rust-late-name-resolver-2.0.cc
@@ -390,8 +390,9 @@ Late::visit (AST::GenericArg &arg)
DefaultResolver::visit (arg);
}
-void
-Late::visit (AST::ClosureExprInner &closure)
+template <class Closure>
+static void
+add_captures (Closure &closure, NameResolutionContext &ctx)
{
auto vals = ctx.values.peek ().get_values ();
for (auto &val : vals)
@@ -399,7 +400,19 @@ Late::visit (AST::ClosureExprInner &closure)
ctx.mappings.add_capture (closure.get_node_id (),
val.second.get_node_id ());
}
+}
+void
+Late::visit (AST::ClosureExprInner &closure)
+{
+ add_captures (closure, ctx);
+ DefaultResolver::visit (closure);
+}
+
+void
+Late::visit (AST::ClosureExprInnerTyped &closure)
+{
+ add_captures (closure, ctx);
DefaultResolver::visit (closure);
}
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 3030261..c779935 100644
--- a/gcc/rust/resolve/rust-late-name-resolver-2.0.h
+++ b/gcc/rust/resolve/rust-late-name-resolver-2.0.h
@@ -57,6 +57,7 @@ public:
void visit (AST::GenericArgs &) override;
void visit (AST::GenericArg &);
void visit (AST::ClosureExprInner &) override;
+ void visit (AST::ClosureExprInnerTyped &) override;
private:
/* Setup Rust's builtin types (u8, i32, !...) in the resolver */