@@ -60,25 +60,27 @@ pub(crate) struct DelegationResults<'hir> {
60
60
}
61
61
62
62
impl < ' 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 {
64
65
let sig_id = self . get_delegation_sig_id ( item_id, path_id, span) ;
65
66
let Ok ( sig_id) = sig_id else {
66
67
return false ;
67
68
} ;
68
- self . has_self ( sig_id, span)
69
+ self . is_method ( sig_id, span)
69
70
}
70
71
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" ) ,
82
84
}
83
85
}
84
86
@@ -324,7 +326,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
324
326
325
327
let call = if self
326
328
. 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) ) )
328
330
. unwrap_or_default ( )
329
331
&& delegation. qself . is_none ( )
330
332
&& !has_generic_args
0 commit comments