diff options
| author | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2019-10-20 02:55:39 +0300 |
|---|---|---|
| committer | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2019-10-24 20:51:33 +0300 |
| commit | fb353f050acd1d18bafcf570d7be1459cf454858 (patch) | |
| tree | 5ef3a1dfc6a53717b2a33be2212416549cc5bc32 | |
| parent | 222503a354d263ee13ee160506443036b799a2ea (diff) | |
| download | rust-fb353f050acd1d18bafcf570d7be1459cf454858.tar.gz rust-fb353f050acd1d18bafcf570d7be1459cf454858.zip | |
resolve: Privatize all resolver fields
| -rw-r--r-- | src/librustc_interface/passes.rs | 43 | ||||
| -rw-r--r-- | src/librustc_resolve/lib.rs | 64 | ||||
| -rw-r--r-- | src/librustdoc/passes/collect_intra_doc_links.rs | 4 |
3 files changed, 61 insertions, 50 deletions
diff --git a/src/librustc_interface/passes.rs b/src/librustc_interface/passes.rs index 77570bc0463..3d6ea5354a9 100644 --- a/src/librustc_interface/passes.rs +++ b/src/librustc_interface/passes.rs @@ -6,6 +6,7 @@ use log::{info, warn, log_enabled}; use rustc::dep_graph::DepGraph; use rustc::hir; use rustc::hir::lowering::lower_crate; +use rustc::hir::map::Definitions; use rustc::hir::def_id::{CrateNum, LOCAL_CRATE}; use rustc::lint; use rustc::middle::{self, reachable, resolve_lifetime, stability}; @@ -154,7 +155,7 @@ pub fn configure_and_expand( } }; box_region_allow_access!(for(), (&mut Resolver<'_>), (&mut resolver)); - ExpansionResult::from_owned_resolver(resolver) + ExpansionResult::from_resolver_outputs(resolver.into_outputs()) }); result.map(|k| (k, resolver)) } @@ -165,42 +166,8 @@ pub struct ExpansionResult { } impl ExpansionResult { - fn from_owned_resolver( - resolver: Resolver<'_>, - ) -> Self { - ExpansionResult { - defs: Steal::new(resolver.definitions), - resolutions: Steal::new(Resolutions { - extern_crate_map: resolver.extern_crate_map, - export_map: resolver.export_map, - trait_map: resolver.trait_map, - glob_map: resolver.glob_map, - maybe_unused_trait_imports: resolver.maybe_unused_trait_imports, - maybe_unused_extern_crates: resolver.maybe_unused_extern_crates, - extern_prelude: resolver.extern_prelude.iter().map(|(ident, entry)| { - (ident.name, entry.introduced_by_item) - }).collect(), - }), - } - } - - pub fn from_resolver_ref( - resolver: &Resolver<'_>, - ) -> Self { - ExpansionResult { - defs: Steal::new(resolver.definitions.clone()), - resolutions: Steal::new(Resolutions { - extern_crate_map: resolver.extern_crate_map.clone(), - export_map: resolver.export_map.clone(), - trait_map: resolver.trait_map.clone(), - glob_map: resolver.glob_map.clone(), - maybe_unused_trait_imports: resolver.maybe_unused_trait_imports.clone(), - maybe_unused_extern_crates: resolver.maybe_unused_extern_crates.clone(), - extern_prelude: resolver.extern_prelude.iter().map(|(ident, entry)| { - (ident.name, entry.introduced_by_item) - }).collect(), - }), - } + fn from_resolver_outputs((defs, resolutions): (Definitions, Resolutions)) -> Self { + ExpansionResult { defs: Steal::new(defs), resolutions: Steal::new(resolutions) } } } @@ -213,7 +180,7 @@ impl BoxedResolver { Err(resolver) => { let resolver = &*resolver; resolver.borrow_mut().access(|resolver| { - ExpansionResult::from_resolver_ref(resolver) + ExpansionResult::from_resolver_outputs(resolver.clone_outputs()) }) } } diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs index 17d8f0f211a..57f1b5186cb 100644 --- a/src/librustc_resolve/lib.rs +++ b/src/librustc_resolve/lib.rs @@ -831,12 +831,12 @@ pub struct Resolver<'a> { session: &'a Session, cstore: &'a CStore, - pub definitions: Definitions, + definitions: Definitions, - pub graph_root: Module<'a>, + graph_root: Module<'a>, prelude: Option<Module<'a>>, - pub extern_prelude: FxHashMap<Ident, ExternPreludeEntry<'a>>, + extern_prelude: FxHashMap<Ident, ExternPreludeEntry<'a>>, /// N.B., this is used only for better diagnostics, not name resolution itself. has_self: FxHashSet<DefId>, @@ -869,9 +869,9 @@ pub struct Resolver<'a> { label_res_map: NodeMap<NodeId>, /// `CrateNum` resolutions of `extern crate` items. - pub extern_crate_map: NodeMap<CrateNum>, - pub export_map: ExportMap<NodeId>, - pub trait_map: TraitMap, + extern_crate_map: NodeMap<CrateNum>, + export_map: ExportMap<NodeId>, + trait_map: TraitMap, /// A map from nodes to anonymous modules. /// Anonymous modules are pseudo-modules that are implicitly created around items @@ -898,11 +898,11 @@ pub struct Resolver<'a> { underscore_disambiguator: u32, /// Maps glob imports to the names of items actually imported. - pub glob_map: GlobMap, + glob_map: GlobMap, used_imports: FxHashSet<(NodeId, Namespace)>, - pub maybe_unused_trait_imports: NodeSet, - pub maybe_unused_extern_crates: Vec<(NodeId, Span)>, + maybe_unused_trait_imports: NodeSet, + maybe_unused_extern_crates: Vec<(NodeId, Span)>, /// Privacy errors are delayed until the end in order to deduplicate them. privacy_errors: Vec<PrivacyError<'a>>, @@ -920,7 +920,7 @@ pub struct Resolver<'a> { macro_names: FxHashSet<Ident>, builtin_macros: FxHashMap<Name, SyntaxExtension>, macro_use_prelude: FxHashMap<Name, &'a NameBinding<'a>>, - pub all_macros: FxHashMap<Name, Res>, + all_macros: FxHashMap<Name, Res>, macro_map: FxHashMap<DefId, Lrc<SyntaxExtension>>, dummy_ext_bang: Lrc<SyntaxExtension>, dummy_ext_derive: Lrc<SyntaxExtension>, @@ -1236,6 +1236,40 @@ impl<'a> Resolver<'a> { Default::default() } + pub fn into_outputs(self) -> (Definitions, ty::Resolutions) { + ( + self.definitions, + ty::Resolutions { + extern_crate_map: self.extern_crate_map, + export_map: self.export_map, + trait_map: self.trait_map, + glob_map: self.glob_map, + maybe_unused_trait_imports: self.maybe_unused_trait_imports, + maybe_unused_extern_crates: self.maybe_unused_extern_crates, + extern_prelude: self.extern_prelude.iter().map(|(ident, entry)| { + (ident.name, entry.introduced_by_item) + }).collect(), + }, + ) + } + + pub fn clone_outputs(&self) -> (Definitions, ty::Resolutions) { + ( + self.definitions.clone(), + ty::Resolutions { + extern_crate_map: self.extern_crate_map.clone(), + export_map: self.export_map.clone(), + trait_map: self.trait_map.clone(), + glob_map: self.glob_map.clone(), + maybe_unused_trait_imports: self.maybe_unused_trait_imports.clone(), + maybe_unused_extern_crates: self.maybe_unused_extern_crates.clone(), + extern_prelude: self.extern_prelude.iter().map(|(ident, entry)| { + (ident.name, entry.introduced_by_item) + }).collect(), + }, + ) + } + fn non_macro_attr(&self, mark_used: bool) -> Lrc<SyntaxExtension> { self.non_macro_attrs[mark_used as usize].clone() } @@ -2808,6 +2842,16 @@ impl<'a> Resolver<'a> { seg.id = self.session.next_node_id(); seg } + + // For rustdoc. + pub fn graph_root(&self) -> Module<'a> { + self.graph_root + } + + // For rustdoc. + pub fn all_macros(&self) -> &FxHashMap<Name, Res> { + &self.all_macros + } } fn names_to_string(names: &[Name]) -> String { diff --git a/src/librustdoc/passes/collect_intra_doc_links.rs b/src/librustdoc/passes/collect_intra_doc_links.rs index 4270b162baf..caa7f08f68c 100644 --- a/src/librustdoc/passes/collect_intra_doc_links.rs +++ b/src/librustdoc/passes/collect_intra_doc_links.rs @@ -432,13 +432,13 @@ fn macro_resolve(cx: &DocContext<'_>, path_str: &str) -> Option<Res> { let path = ast::Path::from_ident(Ident::from_str(path_str)); cx.enter_resolver(|resolver| { if let Ok((Some(ext), res)) = resolver.resolve_macro_path( - &path, None, &ParentScope::module(resolver.graph_root), false, false + &path, None, &ParentScope::module(resolver.graph_root()), false, false ) { if let SyntaxExtensionKind::LegacyBang { .. } = ext.kind { return Some(res.map_id(|_| panic!("unexpected id"))); } } - if let Some(res) = resolver.all_macros.get(&Symbol::intern(path_str)) { + if let Some(res) = resolver.all_macros().get(&Symbol::intern(path_str)) { return Some(res.map_id(|_| panic!("unexpected id"))); } None |
