diff options
| author | bors <bors@rust-lang.org> | 2021-09-03 14:47:13 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2021-09-03 14:47:13 +0000 |
| commit | 577a76f0031f727735410b99a5cc5f0b61b92eef (patch) | |
| tree | 60f9cfd8627c093755e9637a1f614f66e444b92a /compiler/rustc_ast_lowering/src | |
| parent | c5799b2a73bd03d1d7b4a432fa0a0cb93e7288db (diff) | |
| parent | 5e3cd6a8b29b312c796c5a83afd4a5fa21513f8e (diff) | |
| download | rust-577a76f0031f727735410b99a5cc5f0b61b92eef.tar.gz rust-577a76f0031f727735410b99a5cc5f0b61b92eef.zip | |
Auto merge of #88597 - cjgillot:lower-global, r=petrochenkov
Move global analyses from lowering to resolution Split off https://github.com/rust-lang/rust/pull/87234 r? `@petrochenkov`
Diffstat (limited to 'compiler/rustc_ast_lowering/src')
| -rw-r--r-- | compiler/rustc_ast_lowering/src/item.rs | 9 | ||||
| -rw-r--r-- | compiler/rustc_ast_lowering/src/lib.rs | 65 | ||||
| -rw-r--r-- | compiler/rustc_ast_lowering/src/path.rs | 11 |
3 files changed, 6 insertions, 79 deletions
diff --git a/compiler/rustc_ast_lowering/src/item.rs b/compiler/rustc_ast_lowering/src/item.rs index 162b59777ca..e0d4095d769 100644 --- a/compiler/rustc_ast_lowering/src/item.rs +++ b/compiler/rustc_ast_lowering/src/item.rs @@ -378,15 +378,6 @@ impl<'hir> LoweringContext<'_, 'hir> { this.lower_trait_ref(trait_ref, ImplTraitContext::disallowed()) }); - if let Some(ref trait_ref) = trait_ref { - if let Res::Def(DefKind::Trait, def_id) = trait_ref.path.res { - this.trait_impls - .entry(def_id) - .or_default() - .push(lowered_trait_def_id); - } - } - let lowered_ty = this.lower_ty(ty, ImplTraitContext::disallowed()); (trait_ref, lowered_ty) diff --git a/compiler/rustc_ast_lowering/src/lib.rs b/compiler/rustc_ast_lowering/src/lib.rs index fc953279c46..8fd8075725b 100644 --- a/compiler/rustc_ast_lowering/src/lib.rs +++ b/compiler/rustc_ast_lowering/src/lib.rs @@ -39,7 +39,6 @@ use rustc_ast::node_id::NodeMap; use rustc_ast::token::{self, Token}; use rustc_ast::tokenstream::{CanSynthesizeMissingTokens, TokenStream, TokenTree}; use rustc_ast::visit::{self, AssocCtxt, Visitor}; -use rustc_ast::walk_list; use rustc_ast::{self as ast, *}; use rustc_ast_pretty::pprust; use rustc_data_structures::captures::Captures; @@ -48,7 +47,7 @@ use rustc_data_structures::sync::Lrc; use rustc_errors::{struct_span_err, Applicability}; use rustc_hir as hir; use rustc_hir::def::{DefKind, Namespace, PartialRes, PerNS, Res}; -use rustc_hir::def_id::{DefId, DefIdMap, DefPathHash, LocalDefId, CRATE_DEF_ID}; +use rustc_hir::def_id::{DefId, DefPathHash, LocalDefId, CRATE_DEF_ID}; use rustc_hir::definitions::{DefKey, DefPathData, Definitions}; use rustc_hir::intravisit; use rustc_hir::{ConstArg, GenericArg, InferKind, ParamName}; @@ -104,8 +103,6 @@ struct LoweringContext<'a, 'hir: 'a> { owners: IndexVec<LocalDefId, Option<hir::OwnerNode<'hir>>>, bodies: BTreeMap<hir::BodyId, hir::Body<'hir>>, - trait_impls: BTreeMap<DefId, Vec<LocalDefId>>, - modules: BTreeMap<LocalDefId, hir::ModuleItems>, generator_kind: Option<hir::GeneratorKind>, @@ -158,8 +155,6 @@ struct LoweringContext<'a, 'hir: 'a> { current_module: LocalDefId, - type_def_lifetime_params: DefIdMap<usize>, - current_hir_id_owner: (LocalDefId, u32), item_local_id_counters: NodeMap<u32>, node_id_to_hir_id: IndexVec<NodeId, Option<hir::HirId>>, @@ -171,7 +166,7 @@ struct LoweringContext<'a, 'hir: 'a> { pub trait ResolverAstLowering { fn def_key(&mut self, id: DefId) -> DefKey; - fn item_generics_num_lifetimes(&self, def: DefId, sess: &Session) -> usize; + fn item_generics_num_lifetimes(&self, def: DefId) -> usize; fn legacy_const_generic_args(&mut self, expr: &Expr) -> Option<Vec<usize>>; @@ -326,7 +321,6 @@ pub fn lower_crate<'a, 'hir>( arena, owners: IndexVec::default(), bodies: BTreeMap::new(), - trait_impls: BTreeMap::new(), modules: BTreeMap::new(), attrs: BTreeMap::default(), catch_scopes: Vec::new(), @@ -335,7 +329,6 @@ pub fn lower_crate<'a, 'hir>( is_in_trait_impl: false, is_in_dyn_type: false, anonymous_lifetime_mode: AnonymousLifetimeMode::PassThrough, - type_def_lifetime_params: Default::default(), current_module: CRATE_DEF_ID, current_hir_id_owner: (CRATE_DEF_ID, 0), item_local_id_counters: Default::default(), @@ -451,26 +444,8 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> { fn visit_item(&mut self, item: &'tcx Item) { self.lctx.allocate_hir_id_counter(item.id); - match item.kind { - ItemKind::Struct(_, ref generics) - | ItemKind::Union(_, ref generics) - | ItemKind::Enum(_, ref generics) - | ItemKind::TyAlias(box TyAliasKind(_, ref generics, ..)) - | ItemKind::Trait(box TraitKind(_, _, ref generics, ..)) => { - let def_id = self.lctx.resolver.local_def_id(item.id); - let count = generics - .params - .iter() - .filter(|param| { - matches!(param.kind, ast::GenericParamKind::Lifetime { .. }) - }) - .count(); - self.lctx.type_def_lifetime_params.insert(def_id.to_def_id(), count); - } - ItemKind::Use(ref use_tree) => { - self.allocate_use_tree_hir_id_counters(use_tree); - } - _ => {} + if let ItemKind::Use(ref use_tree) = item.kind { + self.allocate_use_tree_hir_id_counters(use_tree); } visit::walk_item(self, item); @@ -485,23 +460,6 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> { self.lctx.allocate_hir_id_counter(item.id); visit::walk_foreign_item(self, item); } - - fn visit_ty(&mut self, t: &'tcx Ty) { - match t.kind { - // Mirrors the case in visit::walk_ty - TyKind::BareFn(ref f) => { - walk_list!(self, visit_generic_param, &f.generic_params); - // Mirrors visit::walk_fn_decl - for parameter in &f.decl.inputs { - // We don't lower the ids of argument patterns - self.visit_pat(¶meter.pat); - self.visit_ty(¶meter.ty) - } - self.visit_fn_ret_ty(&f.decl.output) - } - _ => visit::walk_ty(self, t), - } - } } self.lower_node_id(CRATE_NODE_ID); @@ -515,10 +473,6 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> { self.owners.ensure_contains_elem(CRATE_DEF_ID, || None); self.owners[CRATE_DEF_ID] = Some(hir::OwnerNode::Crate(module)); - let body_ids = body_ids(&self.bodies); - let proc_macros = - c.proc_macros.iter().map(|id| self.node_id_to_hir_id[*id].unwrap()).collect(); - let mut trait_map: FxHashMap<_, FxHashMap<_, _>> = FxHashMap::default(); for (k, v) in self.resolver.take_trait_map().into_iter() { if let Some(Some(hir_id)) = self.node_id_to_hir_id.get(k) { @@ -551,10 +505,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> { let krate = hir::Crate { owners: self.owners, bodies: self.bodies, - body_ids, - trait_impls: self.trait_impls, modules: self.modules, - proc_macros, trait_map, attrs: self.attrs, }; @@ -2749,14 +2700,6 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> { } } -fn body_ids(bodies: &BTreeMap<hir::BodyId, hir::Body<'_>>) -> Vec<hir::BodyId> { - // Sorting by span ensures that we get things in order within a - // file, and also puts the files in a sensible order. - let mut body_ids: Vec<_> = bodies.keys().cloned().collect(); - body_ids.sort_by_key(|b| bodies[b].value.span); - body_ids -} - /// Helper struct for delayed construction of GenericArgs. struct GenericArgsCtor<'hir> { args: SmallVec<[hir::GenericArg<'hir>; 4]>, diff --git a/compiler/rustc_ast_lowering/src/path.rs b/compiler/rustc_ast_lowering/src/path.rs index a11d020c931..90a22b5c209 100644 --- a/compiler/rustc_ast_lowering/src/path.rs +++ b/compiler/rustc_ast_lowering/src/path.rs @@ -90,15 +90,8 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> { _ => ParenthesizedGenericArgs::Err, }; - let num_lifetimes = type_def_id.map_or(0, |def_id| { - if let Some(&n) = self.type_def_lifetime_params.get(&def_id) { - return n; - } - assert!(!def_id.is_local()); - let n = self.resolver.item_generics_num_lifetimes(def_id, self.sess); - self.type_def_lifetime_params.insert(def_id, n); - n - }); + let num_lifetimes = type_def_id + .map_or(0, |def_id| self.resolver.item_generics_num_lifetimes(def_id)); self.lower_path_segment( p.span, segment, |
