Also migrate FnInputTys
This commit is contained in:
parent
24e41f1d13
commit
d521e2148e
@ -258,7 +258,7 @@ pub(in crate::solve) fn extract_tupled_inputs_and_output_from_callable<I: Intern
|
||||
if sig.skip_binder().is_fn_trait_compatible() && !tcx.has_target_features(def_id) {
|
||||
Ok(Some(
|
||||
sig.instantiate(tcx, args)
|
||||
.map_bound(|sig| (Ty::new_tup(tcx, &sig.inputs()), sig.output())),
|
||||
.map_bound(|sig| (Ty::new_tup(tcx, sig.inputs().as_slice()), sig.output())),
|
||||
))
|
||||
} else {
|
||||
Err(NoSolution)
|
||||
@ -267,7 +267,9 @@ pub(in crate::solve) fn extract_tupled_inputs_and_output_from_callable<I: Intern
|
||||
// keep this in sync with assemble_fn_pointer_candidates until the old solver is removed.
|
||||
ty::FnPtr(sig) => {
|
||||
if sig.is_fn_trait_compatible() {
|
||||
Ok(Some(sig.map_bound(|sig| (Ty::new_tup(tcx, &sig.inputs()), sig.output()))))
|
||||
Ok(Some(
|
||||
sig.map_bound(|sig| (Ty::new_tup(tcx, sig.inputs().as_slice()), sig.output())),
|
||||
))
|
||||
} else {
|
||||
Err(NoSolution)
|
||||
}
|
||||
@ -290,7 +292,9 @@ pub(in crate::solve) fn extract_tupled_inputs_and_output_from_callable<I: Intern
|
||||
}
|
||||
}
|
||||
}
|
||||
Ok(Some(closure_args.sig().map_bound(|sig| (sig.inputs()[0], sig.output()))))
|
||||
Ok(Some(
|
||||
closure_args.sig().map_bound(|sig| (sig.inputs().get(0).unwrap(), sig.output())),
|
||||
))
|
||||
}
|
||||
|
||||
// Coroutine-closures don't implement `Fn` traits the normal way.
|
||||
@ -468,7 +472,7 @@ pub(in crate::solve) fn extract_tupled_inputs_and_output_from_async_callable<I:
|
||||
let future_output_ty = Ty::new_projection(tcx, future_output_def_id, [sig.output()]);
|
||||
Ok((
|
||||
bound_sig.rebind(AsyncCallableRelevantTypes {
|
||||
tupled_inputs_ty: Ty::new_tup(tcx, &sig.inputs()),
|
||||
tupled_inputs_ty: Ty::new_tup(tcx, sig.inputs().as_slice()),
|
||||
output_coroutine_ty: sig.output(),
|
||||
coroutine_return_ty: future_output_ty,
|
||||
}),
|
||||
@ -519,7 +523,7 @@ pub(in crate::solve) fn extract_tupled_inputs_and_output_from_async_callable<I:
|
||||
let future_output_ty = Ty::new_projection(tcx, future_output_def_id, [sig.output()]);
|
||||
Ok((
|
||||
bound_sig.rebind(AsyncCallableRelevantTypes {
|
||||
tupled_inputs_ty: sig.inputs()[0],
|
||||
tupled_inputs_ty: sig.inputs().get(0).unwrap(),
|
||||
output_coroutine_ty: sig.output(),
|
||||
coroutine_return_ty: future_output_ty,
|
||||
}),
|
||||
|
@ -90,7 +90,7 @@ fn mk_external_constraints(
|
||||
// Kinds of tys
|
||||
type Ty: Ty<Self>;
|
||||
type Tys: Tys<Self>;
|
||||
type FnInputTys: Copy + Debug + Hash + Eq + Deref<Target = [Self::Ty]> + TypeVisitable<Self>;
|
||||
type FnInputTys: Copy + Debug + Hash + Eq + SliceLike<Item = Self::Ty> + TypeVisitable<Self>;
|
||||
type ParamTy: Copy + Debug + Hash + Eq + ParamLike;
|
||||
type BoundTy: Copy + Debug + Hash + Eq + BoundVarLike<Self>;
|
||||
type PlaceholderTy: PlaceholderLike;
|
||||
|
@ -127,7 +127,6 @@ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
}
|
||||
}
|
||||
|
||||
// FIXME: Convert to DebugWithInfcx impl
|
||||
impl<I: Interner> fmt::Debug for ClauseKind<I> {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
match self {
|
||||
@ -144,7 +143,6 @@ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
}
|
||||
}
|
||||
|
||||
// FIXME: Convert to DebugWithInfcx impl
|
||||
impl<I: Interner> fmt::Debug for PredicateKind<I> {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
match self {
|
||||
|
@ -185,7 +185,7 @@ fn relate<R: TypeRelation<I>>(
|
||||
}
|
||||
|
||||
let inputs_and_output = iter::zip(a_inputs.iter(), b_inputs.iter())
|
||||
.map(|(&a, &b)| ((a, b), false))
|
||||
.map(|(a, b)| ((a, b), false))
|
||||
.chain(iter::once(((a.output(), b.output()), true)))
|
||||
.map(|((a, b), is_output)| {
|
||||
if is_output {
|
||||
|
@ -1005,7 +1005,7 @@ pub fn inputs(self) -> ty::Binder<I, I::FnInputTys> {
|
||||
#[inline]
|
||||
#[track_caller]
|
||||
pub fn input(self, index: usize) -> ty::Binder<I, I::Ty> {
|
||||
self.map_bound(|fn_sig| fn_sig.inputs()[index])
|
||||
self.map_bound(|fn_sig| fn_sig.inputs().get(index).unwrap())
|
||||
}
|
||||
|
||||
pub fn inputs_and_output(self) -> ty::Binder<I, I::Tys> {
|
||||
|
@ -309,7 +309,7 @@ pub fn coroutine_closure_sig(self) -> ty::Binder<I, CoroutineClosureSignature<I>
|
||||
let interior = self.coroutine_witness_ty();
|
||||
let ty::FnPtr(sig) = self.signature_parts_ty().kind() else { panic!() };
|
||||
sig.map_bound(|sig| {
|
||||
let [resume_ty, tupled_inputs_ty] = *sig.inputs() else {
|
||||
let [resume_ty, tupled_inputs_ty] = *sig.inputs().as_slice() else {
|
||||
panic!();
|
||||
};
|
||||
let [yield_ty, return_ty] = *sig.output().tuple_fields().as_slice() else { panic!() };
|
||||
|
Loading…
Reference in New Issue
Block a user