Skip to content

Commit ca44fb0

Browse files
committed
Delegation: support generics in associated items
1 parent fdf61d4 commit ca44fb0

17 files changed

+640
-448
lines changed

compiler/rustc_hir_analysis/src/collect/generics_of.rs

+7-10
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,13 @@ pub(super) fn generics_of(tcx: TyCtxt<'_>, def_id: LocalDefId) -> ty::Generics {
5858
let hir_id = tcx.local_def_id_to_hir_id(def_id);
5959

6060
let node = tcx.hir_node(hir_id);
61+
62+
if let Some(sig) = node.fn_sig()
63+
&& let Some(sig_id) = sig.decl.opt_delegation_sig_id()
64+
{
65+
return inherit_generics_for_delegation_item(tcx, def_id, sig_id);
66+
}
67+
6168
let parent_def_id = match node {
6269
Node::ImplItem(_)
6370
| Node::TraitItem(_)
@@ -228,16 +235,6 @@ pub(super) fn generics_of(tcx: TyCtxt<'_>, def_id: LocalDefId) -> ty::Generics {
228235
// inherit the generics of the item.
229236
Some(parent.to_def_id())
230237
}
231-
ItemKind::Fn(sig, _, _) => {
232-
// For a delegation item inherit generics from callee.
233-
if let Some(sig_id) = sig.decl.opt_delegation_sig_id()
234-
&& let Some(generics) =
235-
inherit_generics_for_delegation_item(tcx, def_id, sig_id)
236-
{
237-
return generics;
238-
}
239-
None
240-
}
241238
_ => None,
242239
},
243240
_ => None,

compiler/rustc_hir_analysis/src/collect/predicates_of.rs

+6-9
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,12 @@ fn gather_explicit_predicates_of(tcx: TyCtxt<'_>, def_id: LocalDefId) -> ty::Gen
120120
let hir_id = tcx.local_def_id_to_hir_id(def_id);
121121
let node = tcx.hir_node(hir_id);
122122

123+
if let Some(sig) = node.fn_sig()
124+
&& let Some(sig_id) = sig.decl.opt_delegation_sig_id()
125+
{
126+
return inherit_predicates_for_delegation_item(tcx, def_id, sig_id);
127+
}
128+
123129
let mut is_trait = None;
124130
let mut is_default_impl_trait = None;
125131

@@ -147,15 +153,6 @@ fn gather_explicit_predicates_of(tcx: TyCtxt<'_>, def_id: LocalDefId) -> ty::Gen
147153
is_trait = Some(self_bounds);
148154
}
149155

150-
ItemKind::Fn(sig, _, _) => {
151-
// For a delegation item inherit predicates from callee.
152-
if let Some(sig_id) = sig.decl.opt_delegation_sig_id()
153-
&& let Some(predicates) =
154-
inherit_predicates_for_delegation_item(tcx, def_id, sig_id)
155-
{
156-
return predicates;
157-
}
158-
}
159156
_ => {}
160157
}
161158
};

0 commit comments

Comments
 (0)