Also migrate FnInputTys

This commit is contained in:
Michael Goulet 2024-06-21 14:07:13 -04:00
parent 24e41f1d13
commit d521e2148e
6 changed files with 13 additions and 11 deletions

View file

@ -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) { if sig.skip_binder().is_fn_trait_compatible() && !tcx.has_target_features(def_id) {
Ok(Some( Ok(Some(
sig.instantiate(tcx, args) 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 { } else {
Err(NoSolution) 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. // keep this in sync with assemble_fn_pointer_candidates until the old solver is removed.
ty::FnPtr(sig) => { ty::FnPtr(sig) => {
if sig.is_fn_trait_compatible() { 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 { } else {
Err(NoSolution) 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. // 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()]); let future_output_ty = Ty::new_projection(tcx, future_output_def_id, [sig.output()]);
Ok(( Ok((
bound_sig.rebind(AsyncCallableRelevantTypes { 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(), output_coroutine_ty: sig.output(),
coroutine_return_ty: future_output_ty, 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()]); let future_output_ty = Ty::new_projection(tcx, future_output_def_id, [sig.output()]);
Ok(( Ok((
bound_sig.rebind(AsyncCallableRelevantTypes { bound_sig.rebind(AsyncCallableRelevantTypes {
tupled_inputs_ty: sig.inputs()[0], tupled_inputs_ty: sig.inputs().get(0).unwrap(),
output_coroutine_ty: sig.output(), output_coroutine_ty: sig.output(),
coroutine_return_ty: future_output_ty, coroutine_return_ty: future_output_ty,
}), }),

View file

@ -90,7 +90,7 @@ fn mk_external_constraints(
// Kinds of tys // Kinds of tys
type Ty: Ty<Self>; type Ty: Ty<Self>;
type Tys: Tys<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 ParamTy: Copy + Debug + Hash + Eq + ParamLike;
type BoundTy: Copy + Debug + Hash + Eq + BoundVarLike<Self>; type BoundTy: Copy + Debug + Hash + Eq + BoundVarLike<Self>;
type PlaceholderTy: PlaceholderLike; type PlaceholderTy: PlaceholderLike;

View file

@ -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> { impl<I: Interner> fmt::Debug for ClauseKind<I> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self { 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> { impl<I: Interner> fmt::Debug for PredicateKind<I> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self { match self {

View file

@ -185,7 +185,7 @@ fn relate<R: TypeRelation<I>>(
} }
let inputs_and_output = iter::zip(a_inputs.iter(), b_inputs.iter()) 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))) .chain(iter::once(((a.output(), b.output()), true)))
.map(|((a, b), is_output)| { .map(|((a, b), is_output)| {
if is_output { if is_output {

View file

@ -1005,7 +1005,7 @@ pub fn inputs(self) -> ty::Binder<I, I::FnInputTys> {
#[inline] #[inline]
#[track_caller] #[track_caller]
pub fn input(self, index: usize) -> ty::Binder<I, I::Ty> { 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> { pub fn inputs_and_output(self) -> ty::Binder<I, I::Tys> {

View file

@ -309,7 +309,7 @@ pub fn coroutine_closure_sig(self) -> ty::Binder<I, CoroutineClosureSignature<I>
let interior = self.coroutine_witness_ty(); let interior = self.coroutine_witness_ty();
let ty::FnPtr(sig) = self.signature_parts_ty().kind() else { panic!() }; let ty::FnPtr(sig) = self.signature_parts_ty().kind() else { panic!() };
sig.map_bound(|sig| { 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!(); panic!();
}; };
let [yield_ty, return_ty] = *sig.output().tuple_fields().as_slice() else { panic!() }; let [yield_ty, return_ty] = *sig.output().tuple_fields().as_slice() else { panic!() };