diff options
| author | bors <bors@rust-lang.org> | 2024-09-07 18:12:05 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2024-09-07 18:12:05 +0000 |
| commit | ec867f03bcd6c39156ef13eb5f85bf4fb924ca29 (patch) | |
| tree | 93b51c48db24efa58e43951970b0c3ae9c84b885 /compiler/rustc_hir_analysis/src/collect/generics_of.rs | |
| parent | 4ff16a97702f1764564139a8c4aaf7936e5d43e4 (diff) | |
| parent | 588dce14211bdfb1305c495f01c697e29e946e10 (diff) | |
| download | rust-ec867f03bcd6c39156ef13eb5f85bf4fb924ca29.tar.gz rust-ec867f03bcd6c39156ef13eb5f85bf4fb924ca29.zip | |
Auto merge of #126161 - Bryanskiy:delegation-generics-4, r=petrochenkov
Delegation: support generics in associated delegation items This is a continuation of https://github.com/rust-lang/rust/pull/125929. [design](https://github.com/Bryanskiy/posts/blob/master/delegation%20in%20generic%20contexts.md) Generic parameters inheritance was implemented in all contexts. Generic arguments are not yet supported. r? `@petrochenkov`
Diffstat (limited to 'compiler/rustc_hir_analysis/src/collect/generics_of.rs')
| -rw-r--r-- | compiler/rustc_hir_analysis/src/collect/generics_of.rs | 16 |
1 files changed, 6 insertions, 10 deletions
diff --git a/compiler/rustc_hir_analysis/src/collect/generics_of.rs b/compiler/rustc_hir_analysis/src/collect/generics_of.rs index be6c3f048dc..ba01ea3f512 100644 --- a/compiler/rustc_hir_analysis/src/collect/generics_of.rs +++ b/compiler/rustc_hir_analysis/src/collect/generics_of.rs @@ -59,6 +59,12 @@ pub(super) fn generics_of(tcx: TyCtxt<'_>, def_id: LocalDefId) -> ty::Generics { let hir_id = tcx.local_def_id_to_hir_id(def_id); let node = tcx.hir_node(hir_id); + if let Some(sig) = node.fn_sig() + && let Some(sig_id) = sig.decl.opt_delegation_sig_id() + { + return inherit_generics_for_delegation_item(tcx, def_id, sig_id); + } + let parent_def_id = match node { Node::ImplItem(_) | Node::TraitItem(_) @@ -229,16 +235,6 @@ pub(super) fn generics_of(tcx: TyCtxt<'_>, def_id: LocalDefId) -> ty::Generics { // inherit the generics of the item. Some(parent.to_def_id()) } - ItemKind::Fn(sig, _, _) => { - // For a delegation item inherit generics from callee. - if let Some(sig_id) = sig.decl.opt_delegation_sig_id() - && let Some(generics) = - inherit_generics_for_delegation_item(tcx, def_id, sig_id) - { - return generics; - } - None - } _ => None, }, _ => None, |
