Skip to content

Commit fb353f0

Browse files
committed
resolve: Privatize all resolver fields
1 parent 222503a commit fb353f0

File tree

3 files changed

+61
-50
lines changed

3 files changed

+61
-50
lines changed

src/librustc_interface/passes.rs

Lines changed: 5 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ use log::{info, warn, log_enabled};
66
use rustc::dep_graph::DepGraph;
77
use rustc::hir;
88
use rustc::hir::lowering::lower_crate;
9+
use rustc::hir::map::Definitions;
910
use rustc::hir::def_id::{CrateNum, LOCAL_CRATE};
1011
use rustc::lint;
1112
use rustc::middle::{self, reachable, resolve_lifetime, stability};
@@ -154,7 +155,7 @@ pub fn configure_and_expand(
154155
}
155156
};
156157
box_region_allow_access!(for(), (&mut Resolver<'_>), (&mut resolver));
157-
ExpansionResult::from_owned_resolver(resolver)
158+
ExpansionResult::from_resolver_outputs(resolver.into_outputs())
158159
});
159160
result.map(|k| (k, resolver))
160161
}
@@ -165,42 +166,8 @@ pub struct ExpansionResult {
165166
}
166167

167168
impl ExpansionResult {
168-
fn from_owned_resolver(
169-
resolver: Resolver<'_>,
170-
) -> Self {
171-
ExpansionResult {
172-
defs: Steal::new(resolver.definitions),
173-
resolutions: Steal::new(Resolutions {
174-
extern_crate_map: resolver.extern_crate_map,
175-
export_map: resolver.export_map,
176-
trait_map: resolver.trait_map,
177-
glob_map: resolver.glob_map,
178-
maybe_unused_trait_imports: resolver.maybe_unused_trait_imports,
179-
maybe_unused_extern_crates: resolver.maybe_unused_extern_crates,
180-
extern_prelude: resolver.extern_prelude.iter().map(|(ident, entry)| {
181-
(ident.name, entry.introduced_by_item)
182-
}).collect(),
183-
}),
184-
}
185-
}
186-
187-
pub fn from_resolver_ref(
188-
resolver: &Resolver<'_>,
189-
) -> Self {
190-
ExpansionResult {
191-
defs: Steal::new(resolver.definitions.clone()),
192-
resolutions: Steal::new(Resolutions {
193-
extern_crate_map: resolver.extern_crate_map.clone(),
194-
export_map: resolver.export_map.clone(),
195-
trait_map: resolver.trait_map.clone(),
196-
glob_map: resolver.glob_map.clone(),
197-
maybe_unused_trait_imports: resolver.maybe_unused_trait_imports.clone(),
198-
maybe_unused_extern_crates: resolver.maybe_unused_extern_crates.clone(),
199-
extern_prelude: resolver.extern_prelude.iter().map(|(ident, entry)| {
200-
(ident.name, entry.introduced_by_item)
201-
}).collect(),
202-
}),
203-
}
169+
fn from_resolver_outputs((defs, resolutions): (Definitions, Resolutions)) -> Self {
170+
ExpansionResult { defs: Steal::new(defs), resolutions: Steal::new(resolutions) }
204171
}
205172
}
206173

@@ -213,7 +180,7 @@ impl BoxedResolver {
213180
Err(resolver) => {
214181
let resolver = &*resolver;
215182
resolver.borrow_mut().access(|resolver| {
216-
ExpansionResult::from_resolver_ref(resolver)
183+
ExpansionResult::from_resolver_outputs(resolver.clone_outputs())
217184
})
218185
}
219186
}

src/librustc_resolve/lib.rs

Lines changed: 54 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -831,12 +831,12 @@ pub struct Resolver<'a> {
831831
session: &'a Session,
832832
cstore: &'a CStore,
833833

834-
pub definitions: Definitions,
834+
definitions: Definitions,
835835

836-
pub graph_root: Module<'a>,
836+
graph_root: Module<'a>,
837837

838838
prelude: Option<Module<'a>>,
839-
pub extern_prelude: FxHashMap<Ident, ExternPreludeEntry<'a>>,
839+
extern_prelude: FxHashMap<Ident, ExternPreludeEntry<'a>>,
840840

841841
/// N.B., this is used only for better diagnostics, not name resolution itself.
842842
has_self: FxHashSet<DefId>,
@@ -869,9 +869,9 @@ pub struct Resolver<'a> {
869869
label_res_map: NodeMap<NodeId>,
870870

871871
/// `CrateNum` resolutions of `extern crate` items.
872-
pub extern_crate_map: NodeMap<CrateNum>,
873-
pub export_map: ExportMap<NodeId>,
874-
pub trait_map: TraitMap,
872+
extern_crate_map: NodeMap<CrateNum>,
873+
export_map: ExportMap<NodeId>,
874+
trait_map: TraitMap,
875875

876876
/// A map from nodes to anonymous modules.
877877
/// Anonymous modules are pseudo-modules that are implicitly created around items
@@ -898,11 +898,11 @@ pub struct Resolver<'a> {
898898
underscore_disambiguator: u32,
899899

900900
/// Maps glob imports to the names of items actually imported.
901-
pub glob_map: GlobMap,
901+
glob_map: GlobMap,
902902

903903
used_imports: FxHashSet<(NodeId, Namespace)>,
904-
pub maybe_unused_trait_imports: NodeSet,
905-
pub maybe_unused_extern_crates: Vec<(NodeId, Span)>,
904+
maybe_unused_trait_imports: NodeSet,
905+
maybe_unused_extern_crates: Vec<(NodeId, Span)>,
906906

907907
/// Privacy errors are delayed until the end in order to deduplicate them.
908908
privacy_errors: Vec<PrivacyError<'a>>,
@@ -920,7 +920,7 @@ pub struct Resolver<'a> {
920920
macro_names: FxHashSet<Ident>,
921921
builtin_macros: FxHashMap<Name, SyntaxExtension>,
922922
macro_use_prelude: FxHashMap<Name, &'a NameBinding<'a>>,
923-
pub all_macros: FxHashMap<Name, Res>,
923+
all_macros: FxHashMap<Name, Res>,
924924
macro_map: FxHashMap<DefId, Lrc<SyntaxExtension>>,
925925
dummy_ext_bang: Lrc<SyntaxExtension>,
926926
dummy_ext_derive: Lrc<SyntaxExtension>,
@@ -1236,6 +1236,40 @@ impl<'a> Resolver<'a> {
12361236
Default::default()
12371237
}
12381238

1239+
pub fn into_outputs(self) -> (Definitions, ty::Resolutions) {
1240+
(
1241+
self.definitions,
1242+
ty::Resolutions {
1243+
extern_crate_map: self.extern_crate_map,
1244+
export_map: self.export_map,
1245+
trait_map: self.trait_map,
1246+
glob_map: self.glob_map,
1247+
maybe_unused_trait_imports: self.maybe_unused_trait_imports,
1248+
maybe_unused_extern_crates: self.maybe_unused_extern_crates,
1249+
extern_prelude: self.extern_prelude.iter().map(|(ident, entry)| {
1250+
(ident.name, entry.introduced_by_item)
1251+
}).collect(),
1252+
},
1253+
)
1254+
}
1255+
1256+
pub fn clone_outputs(&self) -> (Definitions, ty::Resolutions) {
1257+
(
1258+
self.definitions.clone(),
1259+
ty::Resolutions {
1260+
extern_crate_map: self.extern_crate_map.clone(),
1261+
export_map: self.export_map.clone(),
1262+
trait_map: self.trait_map.clone(),
1263+
glob_map: self.glob_map.clone(),
1264+
maybe_unused_trait_imports: self.maybe_unused_trait_imports.clone(),
1265+
maybe_unused_extern_crates: self.maybe_unused_extern_crates.clone(),
1266+
extern_prelude: self.extern_prelude.iter().map(|(ident, entry)| {
1267+
(ident.name, entry.introduced_by_item)
1268+
}).collect(),
1269+
},
1270+
)
1271+
}
1272+
12391273
fn non_macro_attr(&self, mark_used: bool) -> Lrc<SyntaxExtension> {
12401274
self.non_macro_attrs[mark_used as usize].clone()
12411275
}
@@ -2808,6 +2842,16 @@ impl<'a> Resolver<'a> {
28082842
seg.id = self.session.next_node_id();
28092843
seg
28102844
}
2845+
2846+
// For rustdoc.
2847+
pub fn graph_root(&self) -> Module<'a> {
2848+
self.graph_root
2849+
}
2850+
2851+
// For rustdoc.
2852+
pub fn all_macros(&self) -> &FxHashMap<Name, Res> {
2853+
&self.all_macros
2854+
}
28112855
}
28122856

28132857
fn names_to_string(names: &[Name]) -> String {

src/librustdoc/passes/collect_intra_doc_links.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -432,13 +432,13 @@ fn macro_resolve(cx: &DocContext<'_>, path_str: &str) -> Option<Res> {
432432
let path = ast::Path::from_ident(Ident::from_str(path_str));
433433
cx.enter_resolver(|resolver| {
434434
if let Ok((Some(ext), res)) = resolver.resolve_macro_path(
435-
&path, None, &ParentScope::module(resolver.graph_root), false, false
435+
&path, None, &ParentScope::module(resolver.graph_root()), false, false
436436
) {
437437
if let SyntaxExtensionKind::LegacyBang { .. } = ext.kind {
438438
return Some(res.map_id(|_| panic!("unexpected id")));
439439
}
440440
}
441-
if let Some(res) = resolver.all_macros.get(&Symbol::intern(path_str)) {
441+
if let Some(res) = resolver.all_macros().get(&Symbol::intern(path_str)) {
442442
return Some(res.map_id(|_| panic!("unexpected id")));
443443
}
444444
None

0 commit comments

Comments
 (0)