@@ -60,25 +60,27 @@ pub(crate) struct DelegationResults<'hir> {
6060}
6161
6262impl < ' hir > LoweringContext < ' _ , ' hir > {
63- pub ( crate ) fn delegation_has_self ( & self , item_id : NodeId , path_id : NodeId , span : Span ) -> bool {
63+ /// Defines whether the delegatee is an associated function whose first parameter is `self`.
64+ pub ( crate ) fn delegatee_is_method ( & self , item_id : NodeId , path_id : NodeId , span : Span ) -> bool {
6465 let sig_id = self . get_delegation_sig_id ( item_id, path_id, span) ;
6566 let Ok ( sig_id) = sig_id else {
6667 return false ;
6768 } ;
68- self . has_self ( sig_id, span)
69+ self . is_method ( sig_id, span)
6970 }
7071
71- fn has_self ( & self , def_id : DefId , span : Span ) -> bool {
72- if let Some ( local_sig_id) = def_id. as_local ( ) {
73- // The value may be missing due to recursive delegation.
74- // Error will be emitted later during HIR ty lowering.
75- self . resolver . delegation_fn_sigs . get ( & local_sig_id) . is_some_and ( |sig| sig. has_self )
76- } else {
77- match self . tcx . def_kind ( def_id) {
78- DefKind :: Fn => false ,
79- DefKind :: AssocFn => self . tcx . associated_item ( def_id) . fn_has_self_parameter ,
80- _ => span_bug ! ( span, "unexpected DefKind for delegation item" ) ,
81- }
72+ fn is_method ( & self , def_id : DefId , span : Span ) -> bool {
73+ match self . tcx . def_kind ( def_id) {
74+ DefKind :: Fn => false ,
75+ DefKind :: AssocFn => match def_id. as_local ( ) {
76+ Some ( local_def_id) => self
77+ . resolver
78+ . delegation_fn_sigs
79+ . get ( & local_def_id)
80+ . is_some_and ( |sig| sig. has_self ) ,
81+ None => self . tcx . associated_item ( def_id) . fn_has_self_parameter ,
82+ } ,
83+ _ => span_bug ! ( span, "unexpected DefKind for delegation item" ) ,
8284 }
8385 }
8486
@@ -324,7 +326,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
324326
325327 let call = if self
326328 . get_resolution_id ( delegation. id , span)
327- . and_then ( |def_id| Ok ( self . has_self ( def_id, span) ) )
329+ . and_then ( |def_id| Ok ( self . is_method ( def_id, span) ) )
328330 . unwrap_or_default ( )
329331 && delegation. qself . is_none ( )
330332 && !has_generic_args
0 commit comments