Skip to main content

rustc_type_ir/
macros.rs

1/// Used for types that are `Copy` and which **do not care arena
2/// allocated data** (i.e., don't need to be folded).
3#[macro_export]
4macro_rules! TrivialTypeTraversalImpls {
5    ($($ty:ty,)+) => {
6        $(
7            impl<I: $crate::Interner> $crate::TypeFoldable<I> for $ty {
8                fn try_fold_with<F: $crate::FallibleTypeFolder<I>>(
9                    self,
10                    _: &mut F,
11                ) -> ::std::result::Result<Self, F::Error> {
12                    Ok(self)
13                }
14
15                #[inline]
16                fn fold_with<F: $crate::TypeFolder<I>>(
17                    self,
18                    _: &mut F,
19                ) -> Self {
20                    self
21                }
22            }
23
24            impl<I: $crate::Interner> $crate::TypeVisitable<I> for $ty {
25                #[inline]
26                fn visit_with<F: $crate::TypeVisitor<I>>(
27                    &self,
28                    _: &mut F)
29                    -> F::Result
30                {
31                    <F::Result as $crate::VisitorResult>::output()
32                }
33            }
34
35            // NOTE: this deliberately avoids adding an `I: Interner` generic, because that would
36            // allow creating a trivial impl for arena-allocating types, which would be incorrect.
37            unsafe impl<V> $crate::GenericTypeVisitable<V> for $ty {
38                fn generic_visit_with(&self, _visitor: &mut V) {}
39            }
40        )+
41    };
42}
43
44///////////////////////////////////////////////////////////////////////////
45// Atomic structs
46//
47// For things that don't carry any arena-allocated data (and are
48// copy...), just add them to this list.
49
50impl<I: crate::Interner> crate::TypeFoldable<I> for () {
    fn try_fold_with<F: crate::FallibleTypeFolder<I>>(self, _: &mut F)
        -> ::std::result::Result<Self, F::Error> {
        Ok(self)
    }
    #[inline]
    fn fold_with<F: crate::TypeFolder<I>>(self, _: &mut F) -> Self { self }
}
impl<I: crate::Interner> crate::TypeVisitable<I> for () {
    #[inline]
    fn visit_with<F: crate::TypeVisitor<I>>(&self, _: &mut F) -> F::Result {
        <F::Result as crate::VisitorResult>::output()
    }
}
unsafe impl<V> crate::GenericTypeVisitable<V> for () {
    fn generic_visit_with(&self, _visitor: &mut V) {}
}
impl<I: crate::Interner> crate::TypeFoldable<I> for bool {
    fn try_fold_with<F: crate::FallibleTypeFolder<I>>(self, _: &mut F)
        -> ::std::result::Result<Self, F::Error> {
        Ok(self)
    }
    #[inline]
    fn fold_with<F: crate::TypeFolder<I>>(self, _: &mut F) -> Self { self }
}
impl<I: crate::Interner> crate::TypeVisitable<I> for bool {
    #[inline]
    fn visit_with<F: crate::TypeVisitor<I>>(&self, _: &mut F) -> F::Result {
        <F::Result as crate::VisitorResult>::output()
    }
}
unsafe impl<V> crate::GenericTypeVisitable<V> for bool {
    fn generic_visit_with(&self, _visitor: &mut V) {}
}
impl<I: crate::Interner> crate::TypeFoldable<I> for i8 {
    fn try_fold_with<F: crate::FallibleTypeFolder<I>>(self, _: &mut F)
        -> ::std::result::Result<Self, F::Error> {
        Ok(self)
    }
    #[inline]
    fn fold_with<F: crate::TypeFolder<I>>(self, _: &mut F) -> Self { self }
}
impl<I: crate::Interner> crate::TypeVisitable<I> for i8 {
    #[inline]
    fn visit_with<F: crate::TypeVisitor<I>>(&self, _: &mut F) -> F::Result {
        <F::Result as crate::VisitorResult>::output()
    }
}
unsafe impl<V> crate::GenericTypeVisitable<V> for i8 {
    fn generic_visit_with(&self, _visitor: &mut V) {}
}
impl<I: crate::Interner> crate::TypeFoldable<I> for i16 {
    fn try_fold_with<F: crate::FallibleTypeFolder<I>>(self, _: &mut F)
        -> ::std::result::Result<Self, F::Error> {
        Ok(self)
    }
    #[inline]
    fn fold_with<F: crate::TypeFolder<I>>(self, _: &mut F) -> Self { self }
}
impl<I: crate::Interner> crate::TypeVisitable<I> for i16 {
    #[inline]
    fn visit_with<F: crate::TypeVisitor<I>>(&self, _: &mut F) -> F::Result {
        <F::Result as crate::VisitorResult>::output()
    }
}
unsafe impl<V> crate::GenericTypeVisitable<V> for i16 {
    fn generic_visit_with(&self, _visitor: &mut V) {}
}
impl<I: crate::Interner> crate::TypeFoldable<I> for i32 {
    fn try_fold_with<F: crate::FallibleTypeFolder<I>>(self, _: &mut F)
        -> ::std::result::Result<Self, F::Error> {
        Ok(self)
    }
    #[inline]
    fn fold_with<F: crate::TypeFolder<I>>(self, _: &mut F) -> Self { self }
}
impl<I: crate::Interner> crate::TypeVisitable<I> for i32 {
    #[inline]
    fn visit_with<F: crate::TypeVisitor<I>>(&self, _: &mut F) -> F::Result {
        <F::Result as crate::VisitorResult>::output()
    }
}
unsafe impl<V> crate::GenericTypeVisitable<V> for i32 {
    fn generic_visit_with(&self, _visitor: &mut V) {}
}
impl<I: crate::Interner> crate::TypeFoldable<I> for i64 {
    fn try_fold_with<F: crate::FallibleTypeFolder<I>>(self, _: &mut F)
        -> ::std::result::Result<Self, F::Error> {
        Ok(self)
    }
    #[inline]
    fn fold_with<F: crate::TypeFolder<I>>(self, _: &mut F) -> Self { self }
}
impl<I: crate::Interner> crate::TypeVisitable<I> for i64 {
    #[inline]
    fn visit_with<F: crate::TypeVisitor<I>>(&self, _: &mut F) -> F::Result {
        <F::Result as crate::VisitorResult>::output()
    }
}
unsafe impl<V> crate::GenericTypeVisitable<V> for i64 {
    fn generic_visit_with(&self, _visitor: &mut V) {}
}
impl<I: crate::Interner> crate::TypeFoldable<I> for i128 {
    fn try_fold_with<F: crate::FallibleTypeFolder<I>>(self, _: &mut F)
        -> ::std::result::Result<Self, F::Error> {
        Ok(self)
    }
    #[inline]
    fn fold_with<F: crate::TypeFolder<I>>(self, _: &mut F) -> Self { self }
}
impl<I: crate::Interner> crate::TypeVisitable<I> for i128 {
    #[inline]
    fn visit_with<F: crate::TypeVisitor<I>>(&self, _: &mut F) -> F::Result {
        <F::Result as crate::VisitorResult>::output()
    }
}
unsafe impl<V> crate::GenericTypeVisitable<V> for i128 {
    fn generic_visit_with(&self, _visitor: &mut V) {}
}
impl<I: crate::Interner> crate::TypeFoldable<I> for isize {
    fn try_fold_with<F: crate::FallibleTypeFolder<I>>(self, _: &mut F)
        -> ::std::result::Result<Self, F::Error> {
        Ok(self)
    }
    #[inline]
    fn fold_with<F: crate::TypeFolder<I>>(self, _: &mut F) -> Self { self }
}
impl<I: crate::Interner> crate::TypeVisitable<I> for isize {
    #[inline]
    fn visit_with<F: crate::TypeVisitor<I>>(&self, _: &mut F) -> F::Result {
        <F::Result as crate::VisitorResult>::output()
    }
}
unsafe impl<V> crate::GenericTypeVisitable<V> for isize {
    fn generic_visit_with(&self, _visitor: &mut V) {}
}
impl<I: crate::Interner> crate::TypeFoldable<I> for u8 {
    fn try_fold_with<F: crate::FallibleTypeFolder<I>>(self, _: &mut F)
        -> ::std::result::Result<Self, F::Error> {
        Ok(self)
    }
    #[inline]
    fn fold_with<F: crate::TypeFolder<I>>(self, _: &mut F) -> Self { self }
}
impl<I: crate::Interner> crate::TypeVisitable<I> for u8 {
    #[inline]
    fn visit_with<F: crate::TypeVisitor<I>>(&self, _: &mut F) -> F::Result {
        <F::Result as crate::VisitorResult>::output()
    }
}
unsafe impl<V> crate::GenericTypeVisitable<V> for u8 {
    fn generic_visit_with(&self, _visitor: &mut V) {}
}
impl<I: crate::Interner> crate::TypeFoldable<I> for u16 {
    fn try_fold_with<F: crate::FallibleTypeFolder<I>>(self, _: &mut F)
        -> ::std::result::Result<Self, F::Error> {
        Ok(self)
    }
    #[inline]
    fn fold_with<F: crate::TypeFolder<I>>(self, _: &mut F) -> Self { self }
}
impl<I: crate::Interner> crate::TypeVisitable<I> for u16 {
    #[inline]
    fn visit_with<F: crate::TypeVisitor<I>>(&self, _: &mut F) -> F::Result {
        <F::Result as crate::VisitorResult>::output()
    }
}
unsafe impl<V> crate::GenericTypeVisitable<V> for u16 {
    fn generic_visit_with(&self, _visitor: &mut V) {}
}
impl<I: crate::Interner> crate::TypeFoldable<I> for u32 {
    fn try_fold_with<F: crate::FallibleTypeFolder<I>>(self, _: &mut F)
        -> ::std::result::Result<Self, F::Error> {
        Ok(self)
    }
    #[inline]
    fn fold_with<F: crate::TypeFolder<I>>(self, _: &mut F) -> Self { self }
}
impl<I: crate::Interner> crate::TypeVisitable<I> for u32 {
    #[inline]
    fn visit_with<F: crate::TypeVisitor<I>>(&self, _: &mut F) -> F::Result {
        <F::Result as crate::VisitorResult>::output()
    }
}
unsafe impl<V> crate::GenericTypeVisitable<V> for u32 {
    fn generic_visit_with(&self, _visitor: &mut V) {}
}
impl<I: crate::Interner> crate::TypeFoldable<I> for u64 {
    fn try_fold_with<F: crate::FallibleTypeFolder<I>>(self, _: &mut F)
        -> ::std::result::Result<Self, F::Error> {
        Ok(self)
    }
    #[inline]
    fn fold_with<F: crate::TypeFolder<I>>(self, _: &mut F) -> Self { self }
}
impl<I: crate::Interner> crate::TypeVisitable<I> for u64 {
    #[inline]
    fn visit_with<F: crate::TypeVisitor<I>>(&self, _: &mut F) -> F::Result {
        <F::Result as crate::VisitorResult>::output()
    }
}
unsafe impl<V> crate::GenericTypeVisitable<V> for u64 {
    fn generic_visit_with(&self, _visitor: &mut V) {}
}
impl<I: crate::Interner> crate::TypeFoldable<I> for usize {
    fn try_fold_with<F: crate::FallibleTypeFolder<I>>(self, _: &mut F)
        -> ::std::result::Result<Self, F::Error> {
        Ok(self)
    }
    #[inline]
    fn fold_with<F: crate::TypeFolder<I>>(self, _: &mut F) -> Self { self }
}
impl<I: crate::Interner> crate::TypeVisitable<I> for usize {
    #[inline]
    fn visit_with<F: crate::TypeVisitor<I>>(&self, _: &mut F) -> F::Result {
        <F::Result as crate::VisitorResult>::output()
    }
}
unsafe impl<V> crate::GenericTypeVisitable<V> for usize {
    fn generic_visit_with(&self, _visitor: &mut V) {}
}
impl<I: crate::Interner> crate::TypeFoldable<I> for crate::BoundConstness {
    fn try_fold_with<F: crate::FallibleTypeFolder<I>>(self, _: &mut F)
        -> ::std::result::Result<Self, F::Error> {
        Ok(self)
    }
    #[inline]
    fn fold_with<F: crate::TypeFolder<I>>(self, _: &mut F) -> Self { self }
}
impl<I: crate::Interner> crate::TypeVisitable<I> for crate::BoundConstness {
    #[inline]
    fn visit_with<F: crate::TypeVisitor<I>>(&self, _: &mut F) -> F::Result {
        <F::Result as crate::VisitorResult>::output()
    }
}
unsafe impl<V> crate::GenericTypeVisitable<V> for crate::BoundConstness {
    fn generic_visit_with(&self, _visitor: &mut V) {}
}
impl<I: crate::Interner> crate::TypeFoldable<I> for crate::BoundVar {
    fn try_fold_with<F: crate::FallibleTypeFolder<I>>(self, _: &mut F)
        -> ::std::result::Result<Self, F::Error> {
        Ok(self)
    }
    #[inline]
    fn fold_with<F: crate::TypeFolder<I>>(self, _: &mut F) -> Self { self }
}
impl<I: crate::Interner> crate::TypeVisitable<I> for crate::BoundVar {
    #[inline]
    fn visit_with<F: crate::TypeVisitor<I>>(&self, _: &mut F) -> F::Result {
        <F::Result as crate::VisitorResult>::output()
    }
}
unsafe impl<V> crate::GenericTypeVisitable<V> for crate::BoundVar {
    fn generic_visit_with(&self, _visitor: &mut V) {}
}
impl<I: crate::Interner> crate::TypeFoldable<I> for crate::ClausePolarity {
    fn try_fold_with<F: crate::FallibleTypeFolder<I>>(self, _: &mut F)
        -> ::std::result::Result<Self, F::Error> {
        Ok(self)
    }
    #[inline]
    fn fold_with<F: crate::TypeFolder<I>>(self, _: &mut F) -> Self { self }
}
impl<I: crate::Interner> crate::TypeVisitable<I> for crate::ClausePolarity {
    #[inline]
    fn visit_with<F: crate::TypeVisitor<I>>(&self, _: &mut F) -> F::Result {
        <F::Result as crate::VisitorResult>::output()
    }
}
unsafe impl<V> crate::GenericTypeVisitable<V> for crate::ClausePolarity {
    fn generic_visit_with(&self, _visitor: &mut V) {}
}
impl<I: crate::Interner> crate::TypeFoldable<I> for crate::DebruijnIndex {
    fn try_fold_with<F: crate::FallibleTypeFolder<I>>(self, _: &mut F)
        -> ::std::result::Result<Self, F::Error> {
        Ok(self)
    }
    #[inline]
    fn fold_with<F: crate::TypeFolder<I>>(self, _: &mut F) -> Self { self }
}
impl<I: crate::Interner> crate::TypeVisitable<I> for crate::DebruijnIndex {
    #[inline]
    fn visit_with<F: crate::TypeVisitor<I>>(&self, _: &mut F) -> F::Result {
        <F::Result as crate::VisitorResult>::output()
    }
}
unsafe impl<V> crate::GenericTypeVisitable<V> for crate::DebruijnIndex {
    fn generic_visit_with(&self, _visitor: &mut V) {}
}
impl<I: crate::Interner> crate::TypeFoldable<I> for crate::FloatTy {
    fn try_fold_with<F: crate::FallibleTypeFolder<I>>(self, _: &mut F)
        -> ::std::result::Result<Self, F::Error> {
        Ok(self)
    }
    #[inline]
    fn fold_with<F: crate::TypeFolder<I>>(self, _: &mut F) -> Self { self }
}
impl<I: crate::Interner> crate::TypeVisitable<I> for crate::FloatTy {
    #[inline]
    fn visit_with<F: crate::TypeVisitor<I>>(&self, _: &mut F) -> F::Result {
        <F::Result as crate::VisitorResult>::output()
    }
}
unsafe impl<V> crate::GenericTypeVisitable<V> for crate::FloatTy {
    fn generic_visit_with(&self, _visitor: &mut V) {}
}
impl<I: crate::Interner> crate::TypeFoldable<I> for crate::InferConst {
    fn try_fold_with<F: crate::FallibleTypeFolder<I>>(self, _: &mut F)
        -> ::std::result::Result<Self, F::Error> {
        Ok(self)
    }
    #[inline]
    fn fold_with<F: crate::TypeFolder<I>>(self, _: &mut F) -> Self { self }
}
impl<I: crate::Interner> crate::TypeVisitable<I> for crate::InferConst {
    #[inline]
    fn visit_with<F: crate::TypeVisitor<I>>(&self, _: &mut F) -> F::Result {
        <F::Result as crate::VisitorResult>::output()
    }
}
unsafe impl<V> crate::GenericTypeVisitable<V> for crate::InferConst {
    fn generic_visit_with(&self, _visitor: &mut V) {}
}
impl<I: crate::Interner> crate::TypeFoldable<I> for crate::InferTy {
    fn try_fold_with<F: crate::FallibleTypeFolder<I>>(self, _: &mut F)
        -> ::std::result::Result<Self, F::Error> {
        Ok(self)
    }
    #[inline]
    fn fold_with<F: crate::TypeFolder<I>>(self, _: &mut F) -> Self { self }
}
impl<I: crate::Interner> crate::TypeVisitable<I> for crate::InferTy {
    #[inline]
    fn visit_with<F: crate::TypeVisitor<I>>(&self, _: &mut F) -> F::Result {
        <F::Result as crate::VisitorResult>::output()
    }
}
unsafe impl<V> crate::GenericTypeVisitable<V> for crate::InferTy {
    fn generic_visit_with(&self, _visitor: &mut V) {}
}
impl<I: crate::Interner> crate::TypeFoldable<I> for crate::IntTy {
    fn try_fold_with<F: crate::FallibleTypeFolder<I>>(self, _: &mut F)
        -> ::std::result::Result<Self, F::Error> {
        Ok(self)
    }
    #[inline]
    fn fold_with<F: crate::TypeFolder<I>>(self, _: &mut F) -> Self { self }
}
impl<I: crate::Interner> crate::TypeVisitable<I> for crate::IntTy {
    #[inline]
    fn visit_with<F: crate::TypeVisitor<I>>(&self, _: &mut F) -> F::Result {
        <F::Result as crate::VisitorResult>::output()
    }
}
unsafe impl<V> crate::GenericTypeVisitable<V> for crate::IntTy {
    fn generic_visit_with(&self, _visitor: &mut V) {}
}
impl<I: crate::Interner> crate::TypeFoldable<I> for crate::RegionVid {
    fn try_fold_with<F: crate::FallibleTypeFolder<I>>(self, _: &mut F)
        -> ::std::result::Result<Self, F::Error> {
        Ok(self)
    }
    #[inline]
    fn fold_with<F: crate::TypeFolder<I>>(self, _: &mut F) -> Self { self }
}
impl<I: crate::Interner> crate::TypeVisitable<I> for crate::RegionVid {
    #[inline]
    fn visit_with<F: crate::TypeVisitor<I>>(&self, _: &mut F) -> F::Result {
        <F::Result as crate::VisitorResult>::output()
    }
}
unsafe impl<V> crate::GenericTypeVisitable<V> for crate::RegionVid {
    fn generic_visit_with(&self, _visitor: &mut V) {}
}
impl<I: crate::Interner> crate::TypeFoldable<I> for crate::TypeFlags {
    fn try_fold_with<F: crate::FallibleTypeFolder<I>>(self, _: &mut F)
        -> ::std::result::Result<Self, F::Error> {
        Ok(self)
    }
    #[inline]
    fn fold_with<F: crate::TypeFolder<I>>(self, _: &mut F) -> Self { self }
}
impl<I: crate::Interner> crate::TypeVisitable<I> for crate::TypeFlags {
    #[inline]
    fn visit_with<F: crate::TypeVisitor<I>>(&self, _: &mut F) -> F::Result {
        <F::Result as crate::VisitorResult>::output()
    }
}
unsafe impl<V> crate::GenericTypeVisitable<V> for crate::TypeFlags {
    fn generic_visit_with(&self, _visitor: &mut V) {}
}
impl<I: crate::Interner> crate::TypeFoldable<I> for crate::UintTy {
    fn try_fold_with<F: crate::FallibleTypeFolder<I>>(self, _: &mut F)
        -> ::std::result::Result<Self, F::Error> {
        Ok(self)
    }
    #[inline]
    fn fold_with<F: crate::TypeFolder<I>>(self, _: &mut F) -> Self { self }
}
impl<I: crate::Interner> crate::TypeVisitable<I> for crate::UintTy {
    #[inline]
    fn visit_with<F: crate::TypeVisitor<I>>(&self, _: &mut F) -> F::Result {
        <F::Result as crate::VisitorResult>::output()
    }
}
unsafe impl<V> crate::GenericTypeVisitable<V> for crate::UintTy {
    fn generic_visit_with(&self, _visitor: &mut V) {}
}
impl<I: crate::Interner> crate::TypeFoldable<I> for crate::UniverseIndex {
    fn try_fold_with<F: crate::FallibleTypeFolder<I>>(self, _: &mut F)
        -> ::std::result::Result<Self, F::Error> {
        Ok(self)
    }
    #[inline]
    fn fold_with<F: crate::TypeFolder<I>>(self, _: &mut F) -> Self { self }
}
impl<I: crate::Interner> crate::TypeVisitable<I> for crate::UniverseIndex {
    #[inline]
    fn visit_with<F: crate::TypeVisitor<I>>(&self, _: &mut F) -> F::Result {
        <F::Result as crate::VisitorResult>::output()
    }
}
unsafe impl<V> crate::GenericTypeVisitable<V> for crate::UniverseIndex {
    fn generic_visit_with(&self, _visitor: &mut V) {}
}
impl<I: crate::Interner> crate::TypeFoldable<I> for crate::Variance {
    fn try_fold_with<F: crate::FallibleTypeFolder<I>>(self, _: &mut F)
        -> ::std::result::Result<Self, F::Error> {
        Ok(self)
    }
    #[inline]
    fn fold_with<F: crate::TypeFolder<I>>(self, _: &mut F) -> Self { self }
}
impl<I: crate::Interner> crate::TypeVisitable<I> for crate::Variance {
    #[inline]
    fn visit_with<F: crate::TypeVisitor<I>>(&self, _: &mut F) -> F::Result {
        <F::Result as crate::VisitorResult>::output()
    }
}
unsafe impl<V> crate::GenericTypeVisitable<V> for crate::Variance {
    fn generic_visit_with(&self, _visitor: &mut V) {}
}
impl<I: crate::Interner> crate::TypeFoldable<I> for
    crate::solve::BuiltinImplSource {
    fn try_fold_with<F: crate::FallibleTypeFolder<I>>(self, _: &mut F)
        -> ::std::result::Result<Self, F::Error> {
        Ok(self)
    }
    #[inline]
    fn fold_with<F: crate::TypeFolder<I>>(self, _: &mut F) -> Self { self }
}
impl<I: crate::Interner> crate::TypeVisitable<I> for
    crate::solve::BuiltinImplSource {
    #[inline]
    fn visit_with<F: crate::TypeVisitor<I>>(&self, _: &mut F) -> F::Result {
        <F::Result as crate::VisitorResult>::output()
    }
}
unsafe impl<V> crate::GenericTypeVisitable<V> for
    crate::solve::BuiltinImplSource {
    fn generic_visit_with(&self, _visitor: &mut V) {}
}
impl<I: crate::Interner> crate::TypeFoldable<I> for crate::solve::Certainty {
    fn try_fold_with<F: crate::FallibleTypeFolder<I>>(self, _: &mut F)
        -> ::std::result::Result<Self, F::Error> {
        Ok(self)
    }
    #[inline]
    fn fold_with<F: crate::TypeFolder<I>>(self, _: &mut F) -> Self { self }
}
impl<I: crate::Interner> crate::TypeVisitable<I> for crate::solve::Certainty {
    #[inline]
    fn visit_with<F: crate::TypeVisitor<I>>(&self, _: &mut F) -> F::Result {
        <F::Result as crate::VisitorResult>::output()
    }
}
unsafe impl<V> crate::GenericTypeVisitable<V> for crate::solve::Certainty {
    fn generic_visit_with(&self, _visitor: &mut V) {}
}
impl<I: crate::Interner> crate::TypeFoldable<I> for crate::solve::GoalSource {
    fn try_fold_with<F: crate::FallibleTypeFolder<I>>(self, _: &mut F)
        -> ::std::result::Result<Self, F::Error> {
        Ok(self)
    }
    #[inline]
    fn fold_with<F: crate::TypeFolder<I>>(self, _: &mut F) -> Self { self }
}
impl<I: crate::Interner> crate::TypeVisitable<I> for crate::solve::GoalSource
    {
    #[inline]
    fn visit_with<F: crate::TypeVisitor<I>>(&self, _: &mut F) -> F::Result {
        <F::Result as crate::VisitorResult>::output()
    }
}
unsafe impl<V> crate::GenericTypeVisitable<V> for crate::solve::GoalSource {
    fn generic_visit_with(&self, _visitor: &mut V) {}
}
impl<I: crate::Interner> crate::TypeFoldable<I> for
    crate::solve::VisibleForLeakCheck {
    fn try_fold_with<F: crate::FallibleTypeFolder<I>>(self, _: &mut F)
        -> ::std::result::Result<Self, F::Error> {
        Ok(self)
    }
    #[inline]
    fn fold_with<F: crate::TypeFolder<I>>(self, _: &mut F) -> Self { self }
}
impl<I: crate::Interner> crate::TypeVisitable<I> for
    crate::solve::VisibleForLeakCheck {
    #[inline]
    fn visit_with<F: crate::TypeVisitor<I>>(&self, _: &mut F) -> F::Result {
        <F::Result as crate::VisitorResult>::output()
    }
}
unsafe impl<V> crate::GenericTypeVisitable<V> for
    crate::solve::VisibleForLeakCheck {
    fn generic_visit_with(&self, _visitor: &mut V) {}
}
impl<I: crate::Interner> crate::TypeFoldable<I> for rustc_abi::ExternAbi {
    fn try_fold_with<F: crate::FallibleTypeFolder<I>>(self, _: &mut F)
        -> ::std::result::Result<Self, F::Error> {
        Ok(self)
    }
    #[inline]
    fn fold_with<F: crate::TypeFolder<I>>(self, _: &mut F) -> Self { self }
}
impl<I: crate::Interner> crate::TypeVisitable<I> for rustc_abi::ExternAbi {
    #[inline]
    fn visit_with<F: crate::TypeVisitor<I>>(&self, _: &mut F) -> F::Result {
        <F::Result as crate::VisitorResult>::output()
    }
}
unsafe impl<V> crate::GenericTypeVisitable<V> for rustc_abi::ExternAbi {
    fn generic_visit_with(&self, _visitor: &mut V) {}
}
impl<I: crate::Interner> crate::TypeFoldable<I> for rustc_ast_ir::Mutability {
    fn try_fold_with<F: crate::FallibleTypeFolder<I>>(self, _: &mut F)
        -> ::std::result::Result<Self, F::Error> {
        Ok(self)
    }
    #[inline]
    fn fold_with<F: crate::TypeFolder<I>>(self, _: &mut F) -> Self { self }
}
impl<I: crate::Interner> crate::TypeVisitable<I> for rustc_ast_ir::Mutability
    {
    #[inline]
    fn visit_with<F: crate::TypeVisitor<I>>(&self, _: &mut F) -> F::Result {
        <F::Result as crate::VisitorResult>::output()
    }
}
unsafe impl<V> crate::GenericTypeVisitable<V> for rustc_ast_ir::Mutability {
    fn generic_visit_with(&self, _visitor: &mut V) {}
}TrivialTypeTraversalImpls! {
51    (),
52    bool,
53    i8,
54    i16,
55    i32,
56    i64,
57    i128,
58    isize,
59    u8,
60    u16,
61    u32,
62    u64,
63    usize,
64    // tidy-alphabetical-start
65    crate::BoundConstness,
66    crate::BoundVar,
67    crate::ClausePolarity,
68    crate::DebruijnIndex,
69    crate::FloatTy,
70    crate::InferConst,
71    crate::InferTy,
72    crate::IntTy,
73    crate::RegionVid,
74    crate::TypeFlags,
75    crate::UintTy,
76    crate::UniverseIndex,
77    crate::Variance,
78    crate::solve::BuiltinImplSource,
79    crate::solve::Certainty,
80    crate::solve::GoalSource,
81    crate::solve::VisibleForLeakCheck,
82    rustc_abi::ExternAbi,
83    rustc_ast_ir::Mutability,
84    // tidy-alphabetical-end
85}
86
87macro_rules! TrivialLiftImpls {
88    ($($ty:ty),+ $(,)?) => {
89        $(
90            impl<I: $crate::Interner> $crate::lift::Lift<I> for $ty {
91                type Lifted = Self;
92                fn lift_to_interner(self, _: I) -> Self {
93                    self
94                }
95            }
96        )+
97    };
98}
99
100impl<I: crate::Interner> crate::lift::Lift<I> for crate::LateParamRegion<I> {
    type Lifted = Self;
    fn lift_to_interner(self, _: I) -> Self { self }
}TrivialLiftImpls! {
101    crate::LateParamRegion<I>
102}