struct MutabilityShapeBuilder<'pm, 'ctx> {
pm: &'pm PartialMonomorphizer<'ctx>,
params: GenericParams,
extracted: GenericArgs,
binder_depth: DeBruijnId,
}
Expand description
See the docs of MutabilityShapeBuilder::compute_shape
.
Fields§
§pm: &'pm PartialMonomorphizer<'ctx>
§params: GenericParams
The parameters that will constitute the final binder.
extracted: GenericArgs
The arguments to pass to the final binder to recover the input arguments.
binder_depth: DeBruijnId
Current depth under which we’re visiting.
Implementations§
Source§impl<'pm, 'ctx> MutabilityShapeBuilder<'pm, 'ctx>
impl<'pm, 'ctx> MutabilityShapeBuilder<'pm, 'ctx>
Sourcefn compute_shape(
pm: &'pm PartialMonomorphizer<'ctx>,
target_params: &GenericParams,
args: &GenericArgs,
) -> (Binder<GenericArgs>, GenericArgs)
fn compute_shape( pm: &'pm PartialMonomorphizer<'ctx>, target_params: &GenericParams, args: &GenericArgs, ) -> (Binder<GenericArgs>, GenericArgs)
Compute the mutability “shape” of a set of generic arguments by factoring out the minimal amount of information that still allows reconstructing the original arguments while keeping the “shape arguments” free of mutable borrows.
For example, for input: <u32, &’a mut &’b A, Option::<&’a mut bool>> we want to build: binder<’a, ’b, A, B, C> <A, &’a mut B, Option::<&’b mut C>> from which we can recover the original arguments by instantiating it with: <’a, ’a, u32, &’b A, bool>
Formally, given let (shape, shape_args) = get_mutability_shape(args);
, we have the following:
shape.substitute(shape_args) == args
;shape_args
contains no infected types;shape
is as shallow as possible (i.e. takes just enough to get all the infected types and not more).
Note: the input arguments are assumed to have been already partially monomorphized, in the sense that we won’t recurse inside ADT args because we assume any ADT applied to infected args to have been replaced with a fresh infected ADT.
Sourcefn replace_with_fresh_var<Id, Param, Arg>(
&mut self,
val: &mut Arg,
mk_param: impl FnOnce(Id) -> Param,
mk_value: impl FnOnce(DeBruijnVar<Id>) -> Arg,
)where
Id: Idx + Display,
Arg: TyVisitable + Clone,
GenericParams: HasVectorOf<Id, Output = Param>,
GenericArgs: HasVectorOf<Id, Output = Arg>,
fn replace_with_fresh_var<Id, Param, Arg>(
&mut self,
val: &mut Arg,
mk_param: impl FnOnce(Id) -> Param,
mk_value: impl FnOnce(DeBruijnVar<Id>) -> Arg,
)where
Id: Idx + Display,
Arg: TyVisitable + Clone,
GenericParams: HasVectorOf<Id, Output = Param>,
GenericArgs: HasVectorOf<Id, Output = Arg>,
Replace this value with a fresh variable, and record that we did so.
Trait Implementations§
Source§impl<'pm, 'ctx> VisitAstMut for MutabilityShapeBuilder<'pm, 'ctx>
impl<'pm, 'ctx> VisitAstMut for MutabilityShapeBuilder<'pm, 'ctx>
Source§fn visit<'a, T: AstVisitable>(
&'a mut self,
x: &mut T,
) -> ControlFlow<Self::Break>
fn visit<'a, T: AstVisitable>( &'a mut self, x: &mut T, ) -> ControlFlow<Self::Break>
x
(visit_$ty
if it exists, visit_inner
if not).Source§fn enter_ty(&mut self, ty: &mut Ty)
fn enter_ty(&mut self, ty: &mut Ty)
$ty
(unless visit_$ty
is overriden).Source§fn exit_ty_kind(&mut self, kind: &mut TyKind)
fn exit_ty_kind(&mut self, kind: &mut TyKind)
$ty
(unless visit_$ty
is overriden).Source§fn enter_region(&mut self, r: &mut Region)
fn enter_region(&mut self, r: &mut Region)
$ty
(unless visit_$ty
is overriden).Source§fn visit_trait_ref(&mut self, _tref: &mut TraitRef) -> ControlFlow<Self::Break>
fn visit_trait_ref(&mut self, _tref: &mut TraitRef) -> ControlFlow<Self::Break>
$ty
. When overriding this method,
call self.visit_inner(x)
to keep recursively visiting the type, or don’t call
it if the contents of x
should not be visited. Read moreSource§fn visit_by_val<T: AstVisitable>(
self,
x: &mut T,
) -> ControlFlow<Self::Break, Self>
fn visit_by_val<T: AstVisitable>( self, x: &mut T, ) -> ControlFlow<Self::Break, Self>
Source§fn visit_by_val_infallible<T: AstVisitable>(self, x: &mut T) -> Self
fn visit_by_val_infallible<T: AstVisitable>(self, x: &mut T) -> Self
Source§fn visit_inner<T>(&mut self, x: &mut T) -> ControlFlow<Self::Break>where
T: AstVisitable + for<'s> DriveMut<'s, AstVisitableWrapper<Self>>,
fn visit_inner<T>(&mut self, x: &mut T) -> ControlFlow<Self::Break>where
T: AstVisitable + for<'s> DriveMut<'s, AstVisitableWrapper<Self>>,
x
. This calls self.visit()
on each field of T
. This
is available for any type whose contents are all #trait_name
.Source§fn visit_de_bruijn_id(&mut self, x: &mut DeBruijnId) -> ControlFlow<Self::Break>
fn visit_de_bruijn_id(&mut self, x: &mut DeBruijnId) -> ControlFlow<Self::Break>
$ty
. When overriding this method,
call self.visit_inner(x)
to keep recursively visiting the type, or don’t call
it if the contents of x
should not be visited. Read moreSource§fn enter_de_bruijn_id(&mut self, x: &mut DeBruijnId)
fn enter_de_bruijn_id(&mut self, x: &mut DeBruijnId)
$ty
(unless visit_$ty
is overriden).Source§fn exit_de_bruijn_id(&mut self, x: &mut DeBruijnId)
fn exit_de_bruijn_id(&mut self, x: &mut DeBruijnId)
$ty
(unless visit_$ty
is overriden).Source§fn visit_ty(&mut self, x: &mut Ty) -> ControlFlow<Self::Break>
fn visit_ty(&mut self, x: &mut Ty) -> ControlFlow<Self::Break>
$ty
. When overriding this method,
call self.visit_inner(x)
to keep recursively visiting the type, or don’t call
it if the contents of x
should not be visited. Read moreSource§fn exit_ty(&mut self, x: &mut Ty)
fn exit_ty(&mut self, x: &mut Ty)
$ty
(unless visit_$ty
is overriden).Source§fn visit_ty_kind(&mut self, x: &mut TyKind) -> ControlFlow<Self::Break>
fn visit_ty_kind(&mut self, x: &mut TyKind) -> ControlFlow<Self::Break>
$ty
. When overriding this method,
call self.visit_inner(x)
to keep recursively visiting the type, or don’t call
it if the contents of x
should not be visited. Read moreSource§fn enter_ty_kind(&mut self, x: &mut TyKind)
fn enter_ty_kind(&mut self, x: &mut TyKind)
$ty
(unless visit_$ty
is overriden).Source§fn visit_region(&mut self, x: &mut Region) -> ControlFlow<Self::Break>
fn visit_region(&mut self, x: &mut Region) -> ControlFlow<Self::Break>
$ty
. When overriding this method,
call self.visit_inner(x)
to keep recursively visiting the type, or don’t call
it if the contents of x
should not be visited. Read moreSource§fn exit_region(&mut self, x: &mut Region)
fn exit_region(&mut self, x: &mut Region)
$ty
(unless visit_$ty
is overriden).Source§fn visit_const_generic(
&mut self,
x: &mut ConstGeneric,
) -> ControlFlow<Self::Break>
fn visit_const_generic( &mut self, x: &mut ConstGeneric, ) -> ControlFlow<Self::Break>
$ty
. When overriding this method,
call self.visit_inner(x)
to keep recursively visiting the type, or don’t call
it if the contents of x
should not be visited. Read moreSource§fn enter_const_generic(&mut self, x: &mut ConstGeneric)
fn enter_const_generic(&mut self, x: &mut ConstGeneric)
$ty
(unless visit_$ty
is overriden).Source§fn exit_const_generic(&mut self, x: &mut ConstGeneric)
fn exit_const_generic(&mut self, x: &mut ConstGeneric)
$ty
(unless visit_$ty
is overriden).Source§fn enter_trait_ref(&mut self, x: &mut TraitRef)
fn enter_trait_ref(&mut self, x: &mut TraitRef)
$ty
(unless visit_$ty
is overriden).Source§fn exit_trait_ref(&mut self, x: &mut TraitRef)
fn exit_trait_ref(&mut self, x: &mut TraitRef)
$ty
(unless visit_$ty
is overriden).Source§fn visit_trait_ref_kind(
&mut self,
x: &mut TraitRefKind,
) -> ControlFlow<Self::Break>
fn visit_trait_ref_kind( &mut self, x: &mut TraitRefKind, ) -> ControlFlow<Self::Break>
$ty
. When overriding this method,
call self.visit_inner(x)
to keep recursively visiting the type, or don’t call
it if the contents of x
should not be visited. Read moreSource§fn enter_trait_ref_kind(&mut self, x: &mut TraitRefKind)
fn enter_trait_ref_kind(&mut self, x: &mut TraitRefKind)
$ty
(unless visit_$ty
is overriden).Source§fn exit_trait_ref_kind(&mut self, x: &mut TraitRefKind)
fn exit_trait_ref_kind(&mut self, x: &mut TraitRefKind)
$ty
(unless visit_$ty
is overriden).Source§fn visit_type_decl_ref(
&mut self,
x: &mut TypeDeclRef,
) -> ControlFlow<Self::Break>
fn visit_type_decl_ref( &mut self, x: &mut TypeDeclRef, ) -> ControlFlow<Self::Break>
$ty
. When overriding this method,
call self.visit_inner(x)
to keep recursively visiting the type, or don’t call
it if the contents of x
should not be visited. Read moreSource§fn enter_type_decl_ref(&mut self, x: &mut TypeDeclRef)
fn enter_type_decl_ref(&mut self, x: &mut TypeDeclRef)
$ty
(unless visit_$ty
is overriden).Source§fn exit_type_decl_ref(&mut self, x: &mut TypeDeclRef)
fn exit_type_decl_ref(&mut self, x: &mut TypeDeclRef)
$ty
(unless visit_$ty
is overriden).Source§fn visit_fun_decl_ref(&mut self, x: &mut FunDeclRef) -> ControlFlow<Self::Break>
fn visit_fun_decl_ref(&mut self, x: &mut FunDeclRef) -> ControlFlow<Self::Break>
$ty
. When overriding this method,
call self.visit_inner(x)
to keep recursively visiting the type, or don’t call
it if the contents of x
should not be visited. Read moreSource§fn enter_fun_decl_ref(&mut self, x: &mut FunDeclRef)
fn enter_fun_decl_ref(&mut self, x: &mut FunDeclRef)
$ty
(unless visit_$ty
is overriden).Source§fn exit_fun_decl_ref(&mut self, x: &mut FunDeclRef)
fn exit_fun_decl_ref(&mut self, x: &mut FunDeclRef)
$ty
(unless visit_$ty
is overriden).Source§fn visit_maybe_builtin_fun_decl_ref(
&mut self,
x: &mut MaybeBuiltinFunDeclRef,
) -> ControlFlow<Self::Break>
fn visit_maybe_builtin_fun_decl_ref( &mut self, x: &mut MaybeBuiltinFunDeclRef, ) -> ControlFlow<Self::Break>
$ty
. When overriding this method,
call self.visit_inner(x)
to keep recursively visiting the type, or don’t call
it if the contents of x
should not be visited. Read moreSource§fn enter_maybe_builtin_fun_decl_ref(&mut self, x: &mut MaybeBuiltinFunDeclRef)
fn enter_maybe_builtin_fun_decl_ref(&mut self, x: &mut MaybeBuiltinFunDeclRef)
$ty
(unless visit_$ty
is overriden).Source§fn exit_maybe_builtin_fun_decl_ref(&mut self, x: &mut MaybeBuiltinFunDeclRef)
fn exit_maybe_builtin_fun_decl_ref(&mut self, x: &mut MaybeBuiltinFunDeclRef)
$ty
(unless visit_$ty
is overriden).Source§fn visit_trait_method_ref(
&mut self,
x: &mut TraitMethodRef,
) -> ControlFlow<Self::Break>
fn visit_trait_method_ref( &mut self, x: &mut TraitMethodRef, ) -> ControlFlow<Self::Break>
$ty
. When overriding this method,
call self.visit_inner(x)
to keep recursively visiting the type, or don’t call
it if the contents of x
should not be visited. Read moreSource§fn enter_trait_method_ref(&mut self, x: &mut TraitMethodRef)
fn enter_trait_method_ref(&mut self, x: &mut TraitMethodRef)
$ty
(unless visit_$ty
is overriden).Source§fn exit_trait_method_ref(&mut self, x: &mut TraitMethodRef)
fn exit_trait_method_ref(&mut self, x: &mut TraitMethodRef)
$ty
(unless visit_$ty
is overriden).Source§fn visit_global_decl_ref(
&mut self,
x: &mut GlobalDeclRef,
) -> ControlFlow<Self::Break>
fn visit_global_decl_ref( &mut self, x: &mut GlobalDeclRef, ) -> ControlFlow<Self::Break>
$ty
. When overriding this method,
call self.visit_inner(x)
to keep recursively visiting the type, or don’t call
it if the contents of x
should not be visited. Read moreSource§fn enter_global_decl_ref(&mut self, x: &mut GlobalDeclRef)
fn enter_global_decl_ref(&mut self, x: &mut GlobalDeclRef)
$ty
(unless visit_$ty
is overriden).Source§fn exit_global_decl_ref(&mut self, x: &mut GlobalDeclRef)
fn exit_global_decl_ref(&mut self, x: &mut GlobalDeclRef)
$ty
(unless visit_$ty
is overriden).Source§fn visit_trait_decl_ref(
&mut self,
x: &mut TraitDeclRef,
) -> ControlFlow<Self::Break>
fn visit_trait_decl_ref( &mut self, x: &mut TraitDeclRef, ) -> ControlFlow<Self::Break>
$ty
. When overriding this method,
call self.visit_inner(x)
to keep recursively visiting the type, or don’t call
it if the contents of x
should not be visited. Read moreSource§fn enter_trait_decl_ref(&mut self, x: &mut TraitDeclRef)
fn enter_trait_decl_ref(&mut self, x: &mut TraitDeclRef)
$ty
(unless visit_$ty
is overriden).Source§fn exit_trait_decl_ref(&mut self, x: &mut TraitDeclRef)
fn exit_trait_decl_ref(&mut self, x: &mut TraitDeclRef)
$ty
(unless visit_$ty
is overriden).Source§fn visit_trait_impl_ref(
&mut self,
x: &mut TraitImplRef,
) -> ControlFlow<Self::Break>
fn visit_trait_impl_ref( &mut self, x: &mut TraitImplRef, ) -> ControlFlow<Self::Break>
$ty
. When overriding this method,
call self.visit_inner(x)
to keep recursively visiting the type, or don’t call
it if the contents of x
should not be visited. Read moreSource§fn enter_trait_impl_ref(&mut self, x: &mut TraitImplRef)
fn enter_trait_impl_ref(&mut self, x: &mut TraitImplRef)
$ty
(unless visit_$ty
is overriden).Source§fn exit_trait_impl_ref(&mut self, x: &mut TraitImplRef)
fn exit_trait_impl_ref(&mut self, x: &mut TraitImplRef)
$ty
(unless visit_$ty
is overriden).Source§fn visit_generic_args(
&mut self,
x: &mut GenericArgs,
) -> ControlFlow<Self::Break>
fn visit_generic_args( &mut self, x: &mut GenericArgs, ) -> ControlFlow<Self::Break>
$ty
. When overriding this method,
call self.visit_inner(x)
to keep recursively visiting the type, or don’t call
it if the contents of x
should not be visited. Read moreSource§fn enter_generic_args(&mut self, x: &mut GenericArgs)
fn enter_generic_args(&mut self, x: &mut GenericArgs)
$ty
(unless visit_$ty
is overriden).Source§fn exit_generic_args(&mut self, x: &mut GenericArgs)
fn exit_generic_args(&mut self, x: &mut GenericArgs)
$ty
(unless visit_$ty
is overriden).Source§fn visit_generic_params(
&mut self,
x: &mut GenericParams,
) -> ControlFlow<Self::Break>
fn visit_generic_params( &mut self, x: &mut GenericParams, ) -> ControlFlow<Self::Break>
$ty
. When overriding this method,
call self.visit_inner(x)
to keep recursively visiting the type, or don’t call
it if the contents of x
should not be visited. Read moreSource§fn enter_generic_params(&mut self, x: &mut GenericParams)
fn enter_generic_params(&mut self, x: &mut GenericParams)
$ty
(unless visit_$ty
is overriden).Source§fn exit_generic_params(&mut self, x: &mut GenericParams)
fn exit_generic_params(&mut self, x: &mut GenericParams)
$ty
(unless visit_$ty
is overriden).Source§fn visit_trait_param(&mut self, x: &mut TraitParam) -> ControlFlow<Self::Break>
fn visit_trait_param(&mut self, x: &mut TraitParam) -> ControlFlow<Self::Break>
$ty
. When overriding this method,
call self.visit_inner(x)
to keep recursively visiting the type, or don’t call
it if the contents of x
should not be visited. Read moreSource§fn enter_trait_param(&mut self, x: &mut TraitParam)
fn enter_trait_param(&mut self, x: &mut TraitParam)
$ty
(unless visit_$ty
is overriden).Source§fn exit_trait_param(&mut self, x: &mut TraitParam)
fn exit_trait_param(&mut self, x: &mut TraitParam)
$ty
(unless visit_$ty
is overriden).Source§fn visit_trait_clause_id(
&mut self,
x: &mut TraitClauseId,
) -> ControlFlow<Self::Break>
fn visit_trait_clause_id( &mut self, x: &mut TraitClauseId, ) -> ControlFlow<Self::Break>
$ty
. When overriding this method,
call self.visit_inner(x)
to keep recursively visiting the type, or don’t call
it if the contents of x
should not be visited. Read moreSource§fn enter_trait_clause_id(&mut self, x: &mut TraitClauseId)
fn enter_trait_clause_id(&mut self, x: &mut TraitClauseId)
$ty
(unless visit_$ty
is overriden).Source§fn exit_trait_clause_id(&mut self, x: &mut TraitClauseId)
fn exit_trait_clause_id(&mut self, x: &mut TraitClauseId)
$ty
(unless visit_$ty
is overriden).Source§fn visit_trait_type_constraint(
&mut self,
x: &mut TraitTypeConstraint,
) -> ControlFlow<Self::Break>
fn visit_trait_type_constraint( &mut self, x: &mut TraitTypeConstraint, ) -> ControlFlow<Self::Break>
$ty
. When overriding this method,
call self.visit_inner(x)
to keep recursively visiting the type, or don’t call
it if the contents of x
should not be visited. Read moreSource§fn enter_trait_type_constraint(&mut self, x: &mut TraitTypeConstraint)
fn enter_trait_type_constraint(&mut self, x: &mut TraitTypeConstraint)
$ty
(unless visit_$ty
is overriden).Source§fn exit_trait_type_constraint(&mut self, x: &mut TraitTypeConstraint)
fn exit_trait_type_constraint(&mut self, x: &mut TraitTypeConstraint)
$ty
(unless visit_$ty
is overriden).Source§fn visit_place(&mut self, x: &mut Place) -> ControlFlow<Self::Break>
fn visit_place(&mut self, x: &mut Place) -> ControlFlow<Self::Break>
$ty
. When overriding this method,
call self.visit_inner(x)
to keep recursively visiting the type, or don’t call
it if the contents of x
should not be visited. Read moreSource§fn enter_place(&mut self, x: &mut Place)
fn enter_place(&mut self, x: &mut Place)
$ty
(unless visit_$ty
is overriden).Source§fn exit_place(&mut self, x: &mut Place)
fn exit_place(&mut self, x: &mut Place)
$ty
(unless visit_$ty
is overriden).Source§fn visit_rvalue(&mut self, x: &mut Rvalue) -> ControlFlow<Self::Break>
fn visit_rvalue(&mut self, x: &mut Rvalue) -> ControlFlow<Self::Break>
$ty
. When overriding this method,
call self.visit_inner(x)
to keep recursively visiting the type, or don’t call
it if the contents of x
should not be visited. Read moreSource§fn enter_rvalue(&mut self, x: &mut Rvalue)
fn enter_rvalue(&mut self, x: &mut Rvalue)
$ty
(unless visit_$ty
is overriden).Source§fn exit_rvalue(&mut self, x: &mut Rvalue)
fn exit_rvalue(&mut self, x: &mut Rvalue)
$ty
(unless visit_$ty
is overriden).Source§fn visit_de_bruijn_var<T: AstVisitable + Idx>(
&mut self,
x: &mut DeBruijnVar<T>,
) -> ControlFlow<Self::Break>
fn visit_de_bruijn_var<T: AstVisitable + Idx>( &mut self, x: &mut DeBruijnVar<T>, ) -> ControlFlow<Self::Break>
$ty
. When overriding this method,
call self.visit_inner(x)
to keep recursively visiting the type, or don’t call
it if the contents of x
should not be visited. Read moreSource§fn enter_de_bruijn_var<T: AstVisitable + Idx>(&mut self, x: &mut DeBruijnVar<T>)
fn enter_de_bruijn_var<T: AstVisitable + Idx>(&mut self, x: &mut DeBruijnVar<T>)
$ty
(unless visit_$ty
is overriden).Source§fn exit_de_bruijn_var<T: AstVisitable + Idx>(&mut self, x: &mut DeBruijnVar<T>)
fn exit_de_bruijn_var<T: AstVisitable + Idx>(&mut self, x: &mut DeBruijnVar<T>)
$ty
(unless visit_$ty
is overriden).Source§fn visit_region_binder<T: AstVisitable>(
&mut self,
x: &mut RegionBinder<T>,
) -> ControlFlow<Self::Break>
fn visit_region_binder<T: AstVisitable>( &mut self, x: &mut RegionBinder<T>, ) -> ControlFlow<Self::Break>
$ty
. When overriding this method,
call self.visit_inner(x)
to keep recursively visiting the type, or don’t call
it if the contents of x
should not be visited. Read moreSource§fn enter_region_binder<T: AstVisitable>(&mut self, x: &mut RegionBinder<T>)
fn enter_region_binder<T: AstVisitable>(&mut self, x: &mut RegionBinder<T>)
$ty
(unless visit_$ty
is overriden).Source§fn exit_region_binder<T: AstVisitable>(&mut self, x: &mut RegionBinder<T>)
fn exit_region_binder<T: AstVisitable>(&mut self, x: &mut RegionBinder<T>)
$ty
(unless visit_$ty
is overriden).Source§fn visit_binder<T: AstVisitable>(
&mut self,
x: &mut Binder<T>,
) -> ControlFlow<Self::Break>
fn visit_binder<T: AstVisitable>( &mut self, x: &mut Binder<T>, ) -> ControlFlow<Self::Break>
$ty
. When overriding this method,
call self.visit_inner(x)
to keep recursively visiting the type, or don’t call
it if the contents of x
should not be visited. Read moreSource§fn enter_binder<T: AstVisitable>(&mut self, x: &mut Binder<T>)
fn enter_binder<T: AstVisitable>(&mut self, x: &mut Binder<T>)
$ty
(unless visit_$ty
is overriden).Source§fn exit_binder<T: AstVisitable>(&mut self, x: &mut Binder<T>)
fn exit_binder<T: AstVisitable>(&mut self, x: &mut Binder<T>)
$ty
(unless visit_$ty
is overriden).Source§fn visit_llbc_block(&mut self, x: &mut Block) -> ControlFlow<Self::Break>
fn visit_llbc_block(&mut self, x: &mut Block) -> ControlFlow<Self::Break>
$ty
. When overriding this method,
call self.visit_inner(x)
to keep recursively visiting the type, or don’t call
it if the contents of x
should not be visited. Read moreSource§fn enter_llbc_block(&mut self, x: &mut Block)
fn enter_llbc_block(&mut self, x: &mut Block)
$ty
(unless visit_$ty
is overriden).Source§fn exit_llbc_block(&mut self, x: &mut Block)
fn exit_llbc_block(&mut self, x: &mut Block)
$ty
(unless visit_$ty
is overriden).Source§fn visit_llbc_statement(
&mut self,
x: &mut Statement,
) -> ControlFlow<Self::Break>
fn visit_llbc_statement( &mut self, x: &mut Statement, ) -> ControlFlow<Self::Break>
$ty
. When overriding this method,
call self.visit_inner(x)
to keep recursively visiting the type, or don’t call
it if the contents of x
should not be visited. Read moreSource§fn enter_llbc_statement(&mut self, x: &mut Statement)
fn enter_llbc_statement(&mut self, x: &mut Statement)
$ty
(unless visit_$ty
is overriden).Source§fn exit_llbc_statement(&mut self, x: &mut Statement)
fn exit_llbc_statement(&mut self, x: &mut Statement)
$ty
(unless visit_$ty
is overriden).Source§fn visit_ullbc_statement(
&mut self,
x: &mut Statement,
) -> ControlFlow<Self::Break>
fn visit_ullbc_statement( &mut self, x: &mut Statement, ) -> ControlFlow<Self::Break>
$ty
. When overriding this method,
call self.visit_inner(x)
to keep recursively visiting the type, or don’t call
it if the contents of x
should not be visited. Read moreSource§fn enter_ullbc_statement(&mut self, x: &mut Statement)
fn enter_ullbc_statement(&mut self, x: &mut Statement)
$ty
(unless visit_$ty
is overriden).Source§fn exit_ullbc_statement(&mut self, x: &mut Statement)
fn exit_ullbc_statement(&mut self, x: &mut Statement)
$ty
(unless visit_$ty
is overriden).Source§fn visit_ullbc_terminator(
&mut self,
x: &mut Terminator,
) -> ControlFlow<Self::Break>
fn visit_ullbc_terminator( &mut self, x: &mut Terminator, ) -> ControlFlow<Self::Break>
$ty
. When overriding this method,
call self.visit_inner(x)
to keep recursively visiting the type, or don’t call
it if the contents of x
should not be visited. Read moreSource§fn enter_ullbc_terminator(&mut self, x: &mut Terminator)
fn enter_ullbc_terminator(&mut self, x: &mut Terminator)
$ty
(unless visit_$ty
is overriden).Source§fn exit_ullbc_terminator(&mut self, x: &mut Terminator)
fn exit_ullbc_terminator(&mut self, x: &mut Terminator)
$ty
(unless visit_$ty
is overriden).Source§fn visit_aggregate_kind(
&mut self,
x: &mut AggregateKind,
) -> ControlFlow<Self::Break>
fn visit_aggregate_kind( &mut self, x: &mut AggregateKind, ) -> ControlFlow<Self::Break>
$ty
. When overriding this method,
call self.visit_inner(x)
to keep recursively visiting the type, or don’t call
it if the contents of x
should not be visited. Read moreSource§fn enter_aggregate_kind(&mut self, x: &mut AggregateKind)
fn enter_aggregate_kind(&mut self, x: &mut AggregateKind)
$ty
(unless visit_$ty
is overriden).Source§fn exit_aggregate_kind(&mut self, x: &mut AggregateKind)
fn exit_aggregate_kind(&mut self, x: &mut AggregateKind)
$ty
(unless visit_$ty
is overriden).Source§fn visit_fn_ptr(&mut self, x: &mut FnPtr) -> ControlFlow<Self::Break>
fn visit_fn_ptr(&mut self, x: &mut FnPtr) -> ControlFlow<Self::Break>
$ty
. When overriding this method,
call self.visit_inner(x)
to keep recursively visiting the type, or don’t call
it if the contents of x
should not be visited. Read moreSource§fn enter_fn_ptr(&mut self, x: &mut FnPtr)
fn enter_fn_ptr(&mut self, x: &mut FnPtr)
$ty
(unless visit_$ty
is overriden).Source§fn exit_fn_ptr(&mut self, x: &mut FnPtr)
fn exit_fn_ptr(&mut self, x: &mut FnPtr)
$ty
(unless visit_$ty
is overriden).Source§fn visit_item_source(&mut self, x: &mut ItemSource) -> ControlFlow<Self::Break>
fn visit_item_source(&mut self, x: &mut ItemSource) -> ControlFlow<Self::Break>
$ty
. When overriding this method,
call self.visit_inner(x)
to keep recursively visiting the type, or don’t call
it if the contents of x
should not be visited. Read moreSource§fn enter_item_source(&mut self, x: &mut ItemSource)
fn enter_item_source(&mut self, x: &mut ItemSource)
$ty
(unless visit_$ty
is overriden).Source§fn exit_item_source(&mut self, x: &mut ItemSource)
fn exit_item_source(&mut self, x: &mut ItemSource)
$ty
(unless visit_$ty
is overriden).Source§fn visit_item_meta(&mut self, x: &mut ItemMeta) -> ControlFlow<Self::Break>
fn visit_item_meta(&mut self, x: &mut ItemMeta) -> ControlFlow<Self::Break>
$ty
. When overriding this method,
call self.visit_inner(x)
to keep recursively visiting the type, or don’t call
it if the contents of x
should not be visited. Read moreSource§fn enter_item_meta(&mut self, x: &mut ItemMeta)
fn enter_item_meta(&mut self, x: &mut ItemMeta)
$ty
(unless visit_$ty
is overriden).Source§fn exit_item_meta(&mut self, x: &mut ItemMeta)
fn exit_item_meta(&mut self, x: &mut ItemMeta)
$ty
(unless visit_$ty
is overriden).Source§fn visit_span(&mut self, x: &mut Span) -> ControlFlow<Self::Break>
fn visit_span(&mut self, x: &mut Span) -> ControlFlow<Self::Break>
$ty
. When overriding this method,
call self.visit_inner(x)
to keep recursively visiting the type, or don’t call
it if the contents of x
should not be visited. Read moreSource§fn enter_span(&mut self, x: &mut Span)
fn enter_span(&mut self, x: &mut Span)
$ty
(unless visit_$ty
is overriden).Source§fn exit_span(&mut self, x: &mut Span)
fn exit_span(&mut self, x: &mut Span)
$ty
(unless visit_$ty
is overriden).Source§fn visit_constant_expr(
&mut self,
x: &mut ConstantExpr,
) -> ControlFlow<Self::Break>
fn visit_constant_expr( &mut self, x: &mut ConstantExpr, ) -> ControlFlow<Self::Break>
$ty
. When overriding this method,
call self.visit_inner(x)
to keep recursively visiting the type, or don’t call
it if the contents of x
should not be visited. Read moreSource§fn enter_constant_expr(&mut self, x: &mut ConstantExpr)
fn enter_constant_expr(&mut self, x: &mut ConstantExpr)
$ty
(unless visit_$ty
is overriden).Source§fn exit_constant_expr(&mut self, x: &mut ConstantExpr)
fn exit_constant_expr(&mut self, x: &mut ConstantExpr)
$ty
(unless visit_$ty
is overriden).Source§fn visit_fun_decl_id(&mut self, x: &mut FunDeclId) -> ControlFlow<Self::Break>
fn visit_fun_decl_id(&mut self, x: &mut FunDeclId) -> ControlFlow<Self::Break>
$ty
. When overriding this method,
call self.visit_inner(x)
to keep recursively visiting the type, or don’t call
it if the contents of x
should not be visited. Read moreSource§fn enter_fun_decl_id(&mut self, x: &mut FunDeclId)
fn enter_fun_decl_id(&mut self, x: &mut FunDeclId)
$ty
(unless visit_$ty
is overriden).Source§fn exit_fun_decl_id(&mut self, x: &mut FunDeclId)
fn exit_fun_decl_id(&mut self, x: &mut FunDeclId)
$ty
(unless visit_$ty
is overriden).Source§fn visit_global_decl_id(
&mut self,
x: &mut GlobalDeclId,
) -> ControlFlow<Self::Break>
fn visit_global_decl_id( &mut self, x: &mut GlobalDeclId, ) -> ControlFlow<Self::Break>
$ty
. When overriding this method,
call self.visit_inner(x)
to keep recursively visiting the type, or don’t call
it if the contents of x
should not be visited. Read moreSource§fn enter_global_decl_id(&mut self, x: &mut GlobalDeclId)
fn enter_global_decl_id(&mut self, x: &mut GlobalDeclId)
$ty
(unless visit_$ty
is overriden).Source§fn exit_global_decl_id(&mut self, x: &mut GlobalDeclId)
fn exit_global_decl_id(&mut self, x: &mut GlobalDeclId)
$ty
(unless visit_$ty
is overriden).Source§fn visit_type_decl_id(&mut self, x: &mut TypeDeclId) -> ControlFlow<Self::Break>
fn visit_type_decl_id(&mut self, x: &mut TypeDeclId) -> ControlFlow<Self::Break>
$ty
. When overriding this method,
call self.visit_inner(x)
to keep recursively visiting the type, or don’t call
it if the contents of x
should not be visited. Read moreSource§fn enter_type_decl_id(&mut self, x: &mut TypeDeclId)
fn enter_type_decl_id(&mut self, x: &mut TypeDeclId)
$ty
(unless visit_$ty
is overriden).Source§fn exit_type_decl_id(&mut self, x: &mut TypeDeclId)
fn exit_type_decl_id(&mut self, x: &mut TypeDeclId)
$ty
(unless visit_$ty
is overriden).Source§fn visit_trait_decl_id(
&mut self,
x: &mut TraitDeclId,
) -> ControlFlow<Self::Break>
fn visit_trait_decl_id( &mut self, x: &mut TraitDeclId, ) -> ControlFlow<Self::Break>
$ty
. When overriding this method,
call self.visit_inner(x)
to keep recursively visiting the type, or don’t call
it if the contents of x
should not be visited. Read moreSource§fn enter_trait_decl_id(&mut self, x: &mut TraitDeclId)
fn enter_trait_decl_id(&mut self, x: &mut TraitDeclId)
$ty
(unless visit_$ty
is overriden).Source§fn exit_trait_decl_id(&mut self, x: &mut TraitDeclId)
fn exit_trait_decl_id(&mut self, x: &mut TraitDeclId)
$ty
(unless visit_$ty
is overriden).Source§fn visit_trait_impl_id(
&mut self,
x: &mut TraitImplId,
) -> ControlFlow<Self::Break>
fn visit_trait_impl_id( &mut self, x: &mut TraitImplId, ) -> ControlFlow<Self::Break>
$ty
. When overriding this method,
call self.visit_inner(x)
to keep recursively visiting the type, or don’t call
it if the contents of x
should not be visited. Read moreSource§fn enter_trait_impl_id(&mut self, x: &mut TraitImplId)
fn enter_trait_impl_id(&mut self, x: &mut TraitImplId)
$ty
(unless visit_$ty
is overriden).Source§fn exit_trait_impl_id(&mut self, x: &mut TraitImplId)
fn exit_trait_impl_id(&mut self, x: &mut TraitImplId)
$ty
(unless visit_$ty
is overriden).Source§fn visit_fun_decl(&mut self, x: &mut FunDecl) -> ControlFlow<Self::Break>
fn visit_fun_decl(&mut self, x: &mut FunDecl) -> ControlFlow<Self::Break>
$ty
. When overriding this method,
call self.visit_inner(x)
to keep recursively visiting the type, or don’t call
it if the contents of x
should not be visited. Read moreSource§fn enter_fun_decl(&mut self, x: &mut FunDecl)
fn enter_fun_decl(&mut self, x: &mut FunDecl)
$ty
(unless visit_$ty
is overriden).Source§fn exit_fun_decl(&mut self, x: &mut FunDecl)
fn exit_fun_decl(&mut self, x: &mut FunDecl)
$ty
(unless visit_$ty
is overriden).Source§fn visit_global_decl(&mut self, x: &mut GlobalDecl) -> ControlFlow<Self::Break>
fn visit_global_decl(&mut self, x: &mut GlobalDecl) -> ControlFlow<Self::Break>
$ty
. When overriding this method,
call self.visit_inner(x)
to keep recursively visiting the type, or don’t call
it if the contents of x
should not be visited. Read moreSource§fn enter_global_decl(&mut self, x: &mut GlobalDecl)
fn enter_global_decl(&mut self, x: &mut GlobalDecl)
$ty
(unless visit_$ty
is overriden).Source§fn exit_global_decl(&mut self, x: &mut GlobalDecl)
fn exit_global_decl(&mut self, x: &mut GlobalDecl)
$ty
(unless visit_$ty
is overriden).Source§fn visit_type_decl(&mut self, x: &mut TypeDecl) -> ControlFlow<Self::Break>
fn visit_type_decl(&mut self, x: &mut TypeDecl) -> ControlFlow<Self::Break>
$ty
. When overriding this method,
call self.visit_inner(x)
to keep recursively visiting the type, or don’t call
it if the contents of x
should not be visited. Read moreSource§fn enter_type_decl(&mut self, x: &mut TypeDecl)
fn enter_type_decl(&mut self, x: &mut TypeDecl)
$ty
(unless visit_$ty
is overriden).Source§fn exit_type_decl(&mut self, x: &mut TypeDecl)
fn exit_type_decl(&mut self, x: &mut TypeDecl)
$ty
(unless visit_$ty
is overriden).Source§fn visit_trait_decl(&mut self, x: &mut TraitDecl) -> ControlFlow<Self::Break>
fn visit_trait_decl(&mut self, x: &mut TraitDecl) -> ControlFlow<Self::Break>
$ty
. When overriding this method,
call self.visit_inner(x)
to keep recursively visiting the type, or don’t call
it if the contents of x
should not be visited. Read moreSource§fn enter_trait_decl(&mut self, x: &mut TraitDecl)
fn enter_trait_decl(&mut self, x: &mut TraitDecl)
$ty
(unless visit_$ty
is overriden).Source§fn exit_trait_decl(&mut self, x: &mut TraitDecl)
fn exit_trait_decl(&mut self, x: &mut TraitDecl)
$ty
(unless visit_$ty
is overriden).Source§fn visit_trait_impl(&mut self, x: &mut TraitImpl) -> ControlFlow<Self::Break>
fn visit_trait_impl(&mut self, x: &mut TraitImpl) -> ControlFlow<Self::Break>
$ty
. When overriding this method,
call self.visit_inner(x)
to keep recursively visiting the type, or don’t call
it if the contents of x
should not be visited. Read moreSource§fn enter_trait_impl(&mut self, x: &mut TraitImpl)
fn enter_trait_impl(&mut self, x: &mut TraitImpl)
$ty
(unless visit_$ty
is overriden).Source§fn exit_trait_impl(&mut self, x: &mut TraitImpl)
fn exit_trait_impl(&mut self, x: &mut TraitImpl)
$ty
(unless visit_$ty
is overriden).Source§impl<'pm, 'ctx> Visitor for MutabilityShapeBuilder<'pm, 'ctx>
impl<'pm, 'ctx> Visitor for MutabilityShapeBuilder<'pm, 'ctx>
Source§type Break = Infallible
type Break = Infallible
std::convert::Infallible
if the visitor does not short-circuit.Source§impl<'pm, 'ctx> VisitorWithBinderDepth for MutabilityShapeBuilder<'pm, 'ctx>
impl<'pm, 'ctx> VisitorWithBinderDepth for MutabilityShapeBuilder<'pm, 'ctx>
fn binder_depth_mut(&mut self) -> &mut DeBruijnId
Auto Trait Implementations§
impl<'pm, 'ctx> Freeze for MutabilityShapeBuilder<'pm, 'ctx>
impl<'pm, 'ctx> !RefUnwindSafe for MutabilityShapeBuilder<'pm, 'ctx>
impl<'pm, 'ctx> !Send for MutabilityShapeBuilder<'pm, 'ctx>
impl<'pm, 'ctx> !Sync for MutabilityShapeBuilder<'pm, 'ctx>
impl<'pm, 'ctx> Unpin for MutabilityShapeBuilder<'pm, 'ctx>
impl<'pm, 'ctx> !UnwindSafe for MutabilityShapeBuilder<'pm, 'ctx>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<I, T> ExtractContext<I, ()> for T
impl<I, T> ExtractContext<I, ()> for T
§fn extract_context(self, _original_input: I)
fn extract_context(self, _original_input: I)
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more