add EarlyBinder::subst_identity; impl ParameterizedOverTcx (needed for rustc_metadata) and Value for EarlyBinder

This commit is contained in:
Kyle Matsuda 2023-01-10 11:53:35 -07:00
parent e9e0908367
commit c84917ad2e
3 changed files with 20 additions and 0 deletions

View file

@ -32,6 +32,10 @@ impl<T: ParameterizedOverTcx> ParameterizedOverTcx for ty::Binder<'static, T> {
type Value<'tcx> = ty::Binder<'tcx, T::Value<'tcx>>; type Value<'tcx> = ty::Binder<'tcx, T::Value<'tcx>>;
} }
impl<T: ParameterizedOverTcx> ParameterizedOverTcx for ty::EarlyBinder<T> {
type Value<'tcx> = ty::EarlyBinder<T::Value<'tcx>>;
}
#[macro_export] #[macro_export]
macro_rules! trivially_parameterized_over_tcx { macro_rules! trivially_parameterized_over_tcx {
($($ty:ty),+ $(,)?) => { ($($ty:ty),+ $(,)?) => {

View file

@ -713,6 +713,10 @@ impl<'tcx, T: TypeFoldable<'tcx>> ty::EarlyBinder<T> {
let mut folder = SubstFolder { tcx, substs, binders_passed: 0 }; let mut folder = SubstFolder { tcx, substs, binders_passed: 0 };
self.0.fold_with(&mut folder) self.0.fold_with(&mut folder)
} }
pub fn subst_identity(self) -> T {
self.0
}
} }
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////

View file

@ -94,6 +94,18 @@ impl<'tcx> Value<TyCtxt<'tcx>, DepKind> for Representability {
} }
} }
impl<'tcx> Value<TyCtxt<'tcx>, DepKind> for ty::EarlyBinder<Ty<'_>> {
fn from_cycle_error(tcx: TyCtxt<'tcx>, cycle: &[QueryInfo<DepKind>]) -> Self {
ty::EarlyBinder(Ty::from_cycle_error(tcx, cycle))
}
}
impl<'tcx> Value<TyCtxt<'tcx>, DepKind> for ty::EarlyBinder<ty::Binder<'_, ty::FnSig<'_>>> {
fn from_cycle_error(tcx: TyCtxt<'tcx>, cycle: &[QueryInfo<DepKind>]) -> Self {
ty::EarlyBinder(ty::Binder::from_cycle_error(tcx, cycle))
}
}
// item_and_field_ids should form a cycle where each field contains the // item_and_field_ids should form a cycle where each field contains the
// type in the next element in the list // type in the next element in the list
pub fn recursive_type_error( pub fn recursive_type_error(