1
Fork 0

Remove closure_tree

This commit is contained in:
Cameron Steffen 2021-04-19 15:39:19 -05:00
parent 41f0e13bc5
commit 98a11e01e5
2 changed files with 1 additions and 45 deletions

View file

@ -235,18 +235,6 @@ pub struct ScopeTree {
/// escape into 'static and should have no local cleanup scope. /// escape into 'static and should have no local cleanup scope.
rvalue_scopes: FxHashMap<hir::ItemLocalId, Option<Scope>>, rvalue_scopes: FxHashMap<hir::ItemLocalId, Option<Scope>>,
/// Encodes the hierarchy of fn bodies. Every fn body (including
/// closures) forms its own distinct region hierarchy, rooted in
/// the block that is the fn body. This map points from the ID of
/// that root block to the ID of the root block for the enclosing
/// fn, if any. Thus the map structures the fn bodies into a
/// hierarchy based on their lexical mapping. This is used to
/// handle the relationships between regions in a fn and in a
/// closure defined by that fn. See the "Modeling closures"
/// section of the README in infer::region_constraints for
/// more details.
closure_tree: FxHashMap<hir::ItemLocalId, hir::ItemLocalId>,
/// If there are any `yield` nested within a scope, this map /// If there are any `yield` nested within a scope, this map
/// stores the `Span` of the last one and its index in the /// stores the `Span` of the last one and its index in the
/// postorder of the Visitor traversal on the HIR. /// postorder of the Visitor traversal on the HIR.
@ -356,23 +344,6 @@ impl ScopeTree {
self.destruction_scopes.get(&n).cloned() self.destruction_scopes.get(&n).cloned()
} }
/// Records that `sub_closure` is defined within `sup_closure`. These IDs
/// should be the ID of the block that is the fn body, which is
/// also the root of the region hierarchy for that fn.
pub fn record_closure_parent(
&mut self,
sub_closure: hir::ItemLocalId,
sup_closure: hir::ItemLocalId,
) {
debug!(
"record_closure_parent(sub_closure={:?}, sup_closure={:?})",
sub_closure, sup_closure
);
assert!(sub_closure != sup_closure);
let previous = self.closure_tree.insert(sub_closure, sup_closure);
assert!(previous.is_none());
}
pub fn record_var_scope(&mut self, var: hir::ItemLocalId, lifetime: Scope) { pub fn record_var_scope(&mut self, var: hir::ItemLocalId, lifetime: Scope) {
debug!("record_var_scope(sub={:?}, sup={:?})", var, lifetime); debug!("record_var_scope(sub={:?}, sup={:?})", var, lifetime);
assert!(var != lifetime.item_local_id()); assert!(var != lifetime.item_local_id());
@ -474,7 +445,6 @@ impl<'a> HashStable<StableHashingContext<'a>> for ScopeTree {
ref var_map, ref var_map,
ref destruction_scopes, ref destruction_scopes,
ref rvalue_scopes, ref rvalue_scopes,
ref closure_tree,
ref yield_in_scope, ref yield_in_scope,
} = *self; } = *self;
@ -488,7 +458,6 @@ impl<'a> HashStable<StableHashingContext<'a>> for ScopeTree {
var_map.hash_stable(hcx, hasher); var_map.hash_stable(hcx, hasher);
destruction_scopes.hash_stable(hcx, hasher); destruction_scopes.hash_stable(hcx, hasher);
rvalue_scopes.hash_stable(hcx, hasher); rvalue_scopes.hash_stable(hcx, hasher);
closure_tree.hash_stable(hcx, hasher);
yield_in_scope.hash_stable(hcx, hasher); yield_in_scope.hash_stable(hcx, hasher);
} }
} }

View file

@ -23,14 +23,6 @@ use std::mem;
#[derive(Debug, Copy, Clone)] #[derive(Debug, Copy, Clone)]
pub struct Context { pub struct Context {
/// The root of the current region tree. This is typically the id
/// of the innermost fn body. Each fn forms its own disjoint tree
/// in the region hierarchy. These fn bodies are themselves
/// arranged into a tree. See the "Modeling closures" section of
/// the README in `rustc_trait_selection::infer::region_constraints`
/// for more details.
root_id: Option<hir::ItemLocalId>,
/// The scope that contains any new variables declared, plus its depth in /// The scope that contains any new variables declared, plus its depth in
/// the scope tree. /// the scope tree.
var_parent: Option<(Scope, ScopeDepth)>, var_parent: Option<(Scope, ScopeDepth)>,
@ -743,11 +735,6 @@ impl<'tcx> Visitor<'tcx> for RegionResolutionVisitor<'tcx> {
let outer_pessimistic_yield = mem::replace(&mut self.pessimistic_yield, false); let outer_pessimistic_yield = mem::replace(&mut self.pessimistic_yield, false);
self.terminating_scopes.insert(body.value.hir_id.local_id); self.terminating_scopes.insert(body.value.hir_id.local_id);
if let Some(root_id) = self.cx.root_id {
self.scope_tree.record_closure_parent(body.value.hir_id.local_id, root_id);
}
self.cx.root_id = Some(body.value.hir_id.local_id);
self.enter_scope(Scope { id: body.value.hir_id.local_id, data: ScopeData::CallSite }); self.enter_scope(Scope { id: body.value.hir_id.local_id, data: ScopeData::CallSite });
self.enter_scope(Scope { id: body.value.hir_id.local_id, data: ScopeData::Arguments }); self.enter_scope(Scope { id: body.value.hir_id.local_id, data: ScopeData::Arguments });
@ -824,7 +811,7 @@ fn region_scope_tree(tcx: TyCtxt<'_>, def_id: DefId) -> &ScopeTree {
tcx, tcx,
scope_tree: ScopeTree::default(), scope_tree: ScopeTree::default(),
expr_and_pat_count: 0, expr_and_pat_count: 0,
cx: Context { root_id: None, parent: None, var_parent: None }, cx: Context { parent: None, var_parent: None },
terminating_scopes: Default::default(), terminating_scopes: Default::default(),
pessimistic_yield: false, pessimistic_yield: false,
fixup_scopes: vec![], fixup_scopes: vec![],