1
Fork 0

add method_substs to CallKind

This commit is contained in:
Kyle Matsuda 2023-01-20 15:17:01 -07:00
parent a969c194d8
commit 4a7d0e9754
2 changed files with 4 additions and 5 deletions

View file

@ -1064,7 +1064,7 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
); );
} }
} }
CallKind::Normal { self_arg, desugaring, method_did } => { CallKind::Normal { self_arg, desugaring, method_did, method_substs } => {
let self_arg = self_arg.unwrap(); let self_arg = self_arg.unwrap();
let tcx = self.infcx.tcx; let tcx = self.infcx.tcx;
if let Some((CallDesugaringKind::ForLoopIntoIter, _)) = desugaring { if let Some((CallDesugaringKind::ForLoopIntoIter, _)) = desugaring {
@ -1136,9 +1136,7 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
&& let self_ty = infcx.replace_bound_vars_with_fresh_vars( && let self_ty = infcx.replace_bound_vars_with_fresh_vars(
fn_call_span, fn_call_span,
LateBoundRegionConversionTime::FnCall, LateBoundRegionConversionTime::FnCall,
// FIXME: should use `subst` with the method substs. tcx.fn_sig(method_did).subst(tcx, method_substs).input(0),
// Probably need to add `method_substs` to `CallKind`
tcx.fn_sig(method_did).skip_binder().input(0),
) )
&& infcx.can_eq(self.param_env, ty, self_ty).is_ok() && infcx.can_eq(self.param_env, ty, self_ty).is_ok()
{ {

View file

@ -40,6 +40,7 @@ pub enum CallKind<'tcx> {
self_arg: Option<Ident>, self_arg: Option<Ident>,
desugaring: Option<(CallDesugaringKind, Ty<'tcx>)>, desugaring: Option<(CallDesugaringKind, Ty<'tcx>)>,
method_did: DefId, method_did: DefId,
method_substs: SubstsRef<'tcx>,
}, },
/// A call to `Fn(..)::call(..)`, desugared from `my_closure(a, b, c)` /// A call to `Fn(..)::call(..)`, desugared from `my_closure(a, b, c)`
FnCall { fn_trait_id: DefId, self_ty: Ty<'tcx> }, FnCall { fn_trait_id: DefId, self_ty: Ty<'tcx> },
@ -131,6 +132,6 @@ pub fn call_kind<'tcx>(
} else { } else {
None None
}; };
CallKind::Normal { self_arg, desugaring, method_did } CallKind::Normal { self_arg, desugaring, method_did, method_substs }
}) })
} }