mirror of
https://github.com/rust-lang/rust
synced 2024-10-14 12:33:57 +00:00
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) {
|
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,
|
||||||
}),
|
}),
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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> {
|
||||||
|
|
|
@ -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!() };
|
||||||
|
|
Loading…
Reference in a new issue