[−][src]Struct rustc_passes::region::RegionResolutionVisitor
Fields
tcx: TyCtxt<'tcx>expr_and_pat_count: usizepessimistic_yield: boolfixup_scopes: Vec<Scope>scope_tree: ScopeTreecx: Contextterminating_scopes: FxHashSet<ItemLocalId>terminating_scopes is a set containing the ids of each
statement, or conditional/repeating expression. These scopes
are calling "terminating scopes" because, when attempting to
find the scope of a temporary, by default we search up the
enclosing scopes until we encounter the terminating scope. A
conditional/repeating expression is one which is not
guaranteed to execute exactly once upon entering the parent
scope. This could be because the expression only executes
conditionally, such as the expression b in a && b, or
because the expression may execute many times, such as a loop
body. The reason that we distinguish such expressions is that,
upon exiting the parent scope, we cannot statically know how
many times the expression executed, and thus if the expression
creates temporaries we cannot know statically how many such
temporaries we would have to cleanup. Therefore, we ensure that
the temporaries never outlast the conditional/repeating
expression, preventing the need for dynamic checks and/or
arbitrary amounts of stack space. Terminating scopes end
up being contained in a DestructionScope that contains the
destructor's execution.
Implementations
impl<'tcx> RegionResolutionVisitor<'tcx>[src]
pub(in region) fn record_child_scope(
&mut self,
child_scope: Scope
) -> ScopeDepth[src]
&mut self,
child_scope: Scope
) -> ScopeDepth
Records the current parent (if any) as the parent of child_scope.
Returns the depth of child_scope.
pub(in region) fn enter_scope(
&mut self,
child_scope: Scope
)[src]
&mut self,
child_scope: Scope
)
Records the current parent (if any) as the parent of child_scope,
and sets child_scope as the new current parent.
pub(in region) fn enter_node_scope_with_dtor(
&mut self,
id: ItemLocalId
)[src]
&mut self,
id: ItemLocalId
)
Trait Implementations
impl<'tcx> Visitor<'tcx> for RegionResolutionVisitor<'tcx>[src]
type Map = ErasedMap<'tcx>
pub fn nested_visit_map(&mut self) -> NestedVisitorMap<Self::Map>[src]
pub fn visit_block(&mut self, b: &'tcx Block<'tcx>)[src]
pub fn visit_body(&mut self, body: &'tcx Body<'tcx>)[src]
pub fn visit_arm(&mut self, a: &'tcx Arm<'tcx>)[src]
pub fn visit_pat(&mut self, p: &'tcx Pat<'tcx>)[src]
pub fn visit_stmt(&mut self, s: &'tcx Stmt<'tcx>)[src]
pub fn visit_expr(&mut self, ex: &'tcx Expr<'tcx>)[src]
pub fn visit_local(&mut self, l: &'tcx Local<'tcx>)[src]
pub fn visit_nested_item(&mut self, id: ItemId)[src]
pub fn visit_nested_trait_item(&mut self, id: TraitItemId)[src]
pub fn visit_nested_impl_item(&mut self, id: ImplItemId)[src]
pub fn visit_nested_body(&mut self, id: BodyId)[src]
pub fn visit_param(&mut self, param: &'v Param<'v>)[src]
pub fn visit_item(&mut self, i: &'v Item<'v>)[src]
pub fn as_deep_visitor(&mut self) -> DeepVisitor<'_, Self>[src]
pub fn visit_id(&mut self, _hir_id: HirId)[src]
pub fn visit_name(&mut self, _span: Span, _name: Symbol)[src]
pub fn visit_ident(&mut self, ident: Ident)[src]
pub fn visit_mod(&mut self, m: &'v Mod<'v>, _s: Span, n: HirId)[src]
pub fn visit_foreign_item(&mut self, i: &'v ForeignItem<'v>)[src]
pub fn visit_anon_const(&mut self, c: &'v AnonConst)[src]
pub fn visit_ty(&mut self, t: &'v Ty<'v>)[src]
pub fn visit_generic_param(&mut self, p: &'v GenericParam<'v>)[src]
pub fn visit_generics(&mut self, g: &'v Generics<'v>)[src]
pub fn visit_where_predicate(&mut self, predicate: &'v WherePredicate<'v>)[src]
pub fn visit_fn_decl(&mut self, fd: &'v FnDecl<'v>)[src]
pub fn visit_fn(
&mut self,
fk: FnKind<'v>,
fd: &'v FnDecl<'v>,
b: BodyId,
s: Span,
id: HirId
)[src]
&mut self,
fk: FnKind<'v>,
fd: &'v FnDecl<'v>,
b: BodyId,
s: Span,
id: HirId
)
pub fn visit_use(&mut self, path: &'v Path<'v>, hir_id: HirId)[src]
pub fn visit_trait_item(&mut self, ti: &'v TraitItem<'v>)[src]
pub fn visit_trait_item_ref(&mut self, ii: &'v TraitItemRef)[src]
pub fn visit_impl_item(&mut self, ii: &'v ImplItem<'v>)[src]
pub fn visit_impl_item_ref(&mut self, ii: &'v ImplItemRef<'v>)[src]
pub fn visit_trait_ref(&mut self, t: &'v TraitRef<'v>)[src]
pub fn visit_param_bound(&mut self, bounds: &'v GenericBound<'v>)[src]
pub fn visit_poly_trait_ref(
&mut self,
t: &'v PolyTraitRef<'v>,
m: TraitBoundModifier
)[src]
&mut self,
t: &'v PolyTraitRef<'v>,
m: TraitBoundModifier
)
pub fn visit_variant_data(
&mut self,
s: &'v VariantData<'v>,
Symbol,
&'v Generics<'v>,
_parent_id: HirId,
Span
)[src]
&mut self,
s: &'v VariantData<'v>,
Symbol,
&'v Generics<'v>,
_parent_id: HirId,
Span
)
pub fn visit_struct_field(&mut self, s: &'v StructField<'v>)[src]
pub fn visit_enum_def(
&mut self,
enum_definition: &'v EnumDef<'v>,
generics: &'v Generics<'v>,
item_id: HirId,
Span
)[src]
&mut self,
enum_definition: &'v EnumDef<'v>,
generics: &'v Generics<'v>,
item_id: HirId,
Span
)
pub fn visit_variant(
&mut self,
v: &'v Variant<'v>,
g: &'v Generics<'v>,
item_id: HirId
)[src]
&mut self,
v: &'v Variant<'v>,
g: &'v Generics<'v>,
item_id: HirId
)
pub fn visit_label(&mut self, label: &'v Label)[src]
pub fn visit_generic_arg(&mut self, generic_arg: &'v GenericArg<'v>)[src]
pub fn visit_lifetime(&mut self, lifetime: &'v Lifetime)[src]
pub fn visit_qpath(&mut self, qpath: &'v QPath<'v>, id: HirId, span: Span)[src]
pub fn visit_path(&mut self, path: &'v Path<'v>, _id: HirId)[src]
pub fn visit_path_segment(
&mut self,
path_span: Span,
path_segment: &'v PathSegment<'v>
)[src]
&mut self,
path_span: Span,
path_segment: &'v PathSegment<'v>
)
pub fn visit_generic_args(
&mut self,
path_span: Span,
generic_args: &'v GenericArgs<'v>
)[src]
&mut self,
path_span: Span,
generic_args: &'v GenericArgs<'v>
)
pub fn visit_assoc_type_binding(&mut self, type_binding: &'v TypeBinding<'v>)[src]
pub fn visit_attribute(&mut self, _attr: &'v Attribute)[src]
pub fn visit_macro_def(&mut self, macro_def: &'v MacroDef<'v>)[src]
pub fn visit_vis(&mut self, vis: &'v Spanned<VisibilityKind<'v>>)[src]
pub fn visit_associated_item_kind(&mut self, kind: &'v AssocItemKind)[src]
pub fn visit_defaultness(&mut self, defaultness: &'v Defaultness)[src]
Auto Trait Implementations
impl<'tcx> !RefUnwindSafe for RegionResolutionVisitor<'tcx>
impl<'tcx> !Send for RegionResolutionVisitor<'tcx>
impl<'tcx> !Sync for RegionResolutionVisitor<'tcx>
impl<'tcx> Unpin for RegionResolutionVisitor<'tcx>
impl<'tcx> !UnwindSafe for RegionResolutionVisitor<'tcx>
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized, [src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized, [src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized, [src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T[src]
impl<T> From<T> for T[src]
impl<T, U> Into<U> for T where
U: From<T>, [src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>, [src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>, [src]
U: TryFrom<T>,