diff options
author | Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com> | 2025-01-24 16:02:10 +0100 |
---|---|---|
committer | P-E-P <32375388+P-E-P@users.noreply.github.com> | 2025-01-24 16:31:36 +0000 |
commit | 98d89d58d7c6b25fc6e29735c3b6d051fd45ae8a (patch) | |
tree | 6a2a046cd0f9417fda1fa2ca083dbcc14f172071 /gcc | |
parent | 2b473162d33e0f3fe31a7f098c745cb388a01aa4 (diff) | |
download | gcc-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.cc | 17 | ||||
-rw-r--r-- | gcc/rust/resolve/rust-late-name-resolver-2.0.h | 1 |
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 */ |