Trait rustc_middle::ty::fold::TypeFoldable [−][src]
pub trait TypeFoldable<'tcx>: Debug + Clone {
Show 28 methods
fn super_fold_with<F: TypeFolder<'tcx>>(self, folder: &mut F) -> Self;
fn super_visit_with<V: TypeVisitor<'tcx>>(
&self,
visitor: &mut V
) -> ControlFlow<V::BreakTy>;
fn fold_with<F: TypeFolder<'tcx>>(self, folder: &mut F) -> Self { ... }
fn visit_with<V: TypeVisitor<'tcx>>(
&self,
visitor: &mut V
) -> ControlFlow<V::BreakTy> { ... }
fn has_vars_bound_at_or_above(&self, binder: DebruijnIndex) -> bool { ... }
fn has_vars_bound_above(&self, binder: DebruijnIndex) -> bool { ... }
fn has_escaping_bound_vars(&self) -> bool { ... }
fn definitely_has_type_flags(
&self,
tcx: TyCtxt<'tcx>,
flags: TypeFlags
) -> bool { ... }
fn has_type_flags(&self, flags: TypeFlags) -> bool { ... }
fn has_projections(&self) -> bool { ... }
fn has_opaque_types(&self) -> bool { ... }
fn references_error(&self) -> bool { ... }
fn potentially_has_param_types_or_consts(&self) -> bool { ... }
fn definitely_has_param_types_or_consts(&self, tcx: TyCtxt<'tcx>) -> bool { ... }
fn has_infer_regions(&self) -> bool { ... }
fn has_infer_types(&self) -> bool { ... }
fn has_infer_types_or_consts(&self) -> bool { ... }
fn needs_infer(&self) -> bool { ... }
fn has_placeholders(&self) -> bool { ... }
fn potentially_needs_subst(&self) -> bool { ... }
fn definitely_needs_subst(&self, tcx: TyCtxt<'tcx>) -> bool { ... }
fn has_free_regions(&self, tcx: TyCtxt<'tcx>) -> bool { ... }
fn has_erased_regions(&self) -> bool { ... }
fn has_erasable_regions(&self, tcx: TyCtxt<'tcx>) -> bool { ... }
fn is_known_global(&self) -> bool { ... }
fn is_global(&self, tcx: TyCtxt<'tcx>) -> bool { ... }
fn has_late_bound_regions(&self) -> bool { ... }
fn still_further_specializable(&self) -> bool { ... }
}
Expand description
This trait is implemented for every type that can be folded.
Basically, every type that has a corresponding method in TypeFolder
.
To implement this conveniently, use the derive macro located in rustc_macros
.
Required methods
fn super_fold_with<F: TypeFolder<'tcx>>(self, folder: &mut F) -> Self
fn super_visit_with<V: TypeVisitor<'tcx>>(
&self,
visitor: &mut V
) -> ControlFlow<V::BreakTy>
Provided methods
fn fold_with<F: TypeFolder<'tcx>>(self, folder: &mut F) -> Self
fn visit_with<V: TypeVisitor<'tcx>>(
&self,
visitor: &mut V
) -> ControlFlow<V::BreakTy>
fn has_vars_bound_at_or_above(&self, binder: DebruijnIndex) -> bool
fn has_vars_bound_at_or_above(&self, binder: DebruijnIndex) -> bool
Returns true
if self
has any late-bound regions that are either
bound by binder
or bound by some binder outside of binder
.
If binder
is ty::INNERMOST
, this indicates whether
there are any late-bound regions that appear free.
fn has_vars_bound_above(&self, binder: DebruijnIndex) -> bool
fn has_vars_bound_above(&self, binder: DebruijnIndex) -> bool
Returns true
if this self
has any regions that escape binder
(and
hence are not bound by it).
fn has_escaping_bound_vars(&self) -> bool
fn definitely_has_type_flags(&self, tcx: TyCtxt<'tcx>, flags: TypeFlags) -> bool
fn has_type_flags(&self, flags: TypeFlags) -> bool
fn has_projections(&self) -> bool
fn has_opaque_types(&self) -> bool
fn references_error(&self) -> bool
fn potentially_has_param_types_or_consts(&self) -> bool
fn definitely_has_param_types_or_consts(&self, tcx: TyCtxt<'tcx>) -> bool
fn has_infer_regions(&self) -> bool
fn has_infer_types(&self) -> bool
fn has_infer_types_or_consts(&self) -> bool
fn needs_infer(&self) -> bool
fn has_placeholders(&self) -> bool
fn potentially_needs_subst(&self) -> bool
fn definitely_needs_subst(&self, tcx: TyCtxt<'tcx>) -> bool
fn has_free_regions(&self, tcx: TyCtxt<'tcx>) -> bool
fn has_free_regions(&self, tcx: TyCtxt<'tcx>) -> bool
“Free” regions in this context means that it has any region that is not (a) erased or (b) late-bound.
fn has_erased_regions(&self) -> bool
fn has_erasable_regions(&self, tcx: TyCtxt<'tcx>) -> bool
fn has_erasable_regions(&self, tcx: TyCtxt<'tcx>) -> bool
True if there are any un-erased free regions.
fn is_known_global(&self) -> bool
fn is_known_global(&self) -> bool
Indicates whether this value definitely references only ‘global’ generic parameters that are the same regardless of what fn we are in. This is used for caching.
Note that this function is pessimistic and may incorrectly return
false
.
Indicates whether this value references only ‘global’ generic parameters that are the same regardless of what fn we are in. This is used for caching.
fn has_late_bound_regions(&self) -> bool
fn has_late_bound_regions(&self) -> bool
True if there are any late-bound regions
fn still_further_specializable(&self) -> bool
fn still_further_specializable(&self) -> bool
Indicates whether this value still has parameters/placeholders/inference variables
which could be replaced later, in a way that would change the results of impl
specialization.
Implementations on Foreign Types
impl<'tcx, A: TypeFoldable<'tcx>, B: TypeFoldable<'tcx>, C: TypeFoldable<'tcx>> TypeFoldable<'tcx> for (A, B, C)
impl<'tcx, A: TypeFoldable<'tcx>, B: TypeFoldable<'tcx>, C: TypeFoldable<'tcx>> TypeFoldable<'tcx> for (A, B, C)
impl<'tcx, T, E> TypeFoldable<'tcx> for Result<T, E> where
T: TypeFoldable<'tcx>,
E: TypeFoldable<'tcx>,
impl<'tcx, T, E> TypeFoldable<'tcx> for Result<T, E> where
T: TypeFoldable<'tcx>,
E: TypeFoldable<'tcx>,
Implementors
AdtDefs are basically the same as a DefId.