Skip to content

Commit 272cf4e

Browse files
committed
Refactor no_implicit_prelude: Cell<bool> -> no_implicit_prelude: bool.
1 parent 85bfd82 commit 272cf4e

File tree

3 files changed

+41
-40
lines changed

3 files changed

+41
-40
lines changed

src/librustc_driver/driver.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -643,7 +643,8 @@ pub fn phase_2_configure_and_expand<'a, F>(sess: &Session,
643643
macro_import::MacroLoader::new(sess, &cstore, crate_name, krate.config.clone());
644644

645645
let resolver_arenas = Resolver::arenas();
646-
let mut resolver = Resolver::new(sess, make_glob_map, &mut macro_loader, &resolver_arenas);
646+
let mut resolver =
647+
Resolver::new(sess, &krate, make_glob_map, &mut macro_loader, &resolver_arenas);
647648
syntax_ext::register_builtins(&mut resolver, sess.features.borrow().quote);
648649

649650
krate = time(time_passes, "expansion", || {

src/librustc_resolve/build_reduced_graph.rs

+18-16
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
//! any imports resolved.
1515
1616
use resolve_imports::ImportDirectiveSubclass::{self, GlobImport};
17-
use {Module, ModuleKind};
17+
use {Module, ModuleS, ModuleKind};
1818
use Namespace::{self, TypeNS, ValueNS};
1919
use {NameBinding, NameBindingKind, ToNameBinding};
2020
use Resolver;
@@ -55,8 +55,6 @@ impl<'a> ToNameBinding<'a> for (Def, Span, ty::Visibility) {
5555
impl<'b> Resolver<'b> {
5656
/// Constructs the reduced graph for the entire crate.
5757
pub fn build_reduced_graph(&mut self, krate: &Crate) {
58-
let no_implicit_prelude = attr::contains_name(&krate.attrs, "no_implicit_prelude");
59-
self.graph_root.no_implicit_prelude.set(no_implicit_prelude);
6058
visit::walk_crate(&mut BuildReducedGraphVisitor { resolver: self }, krate);
6159
}
6260

@@ -195,8 +193,11 @@ impl<'b> Resolver<'b> {
195193
krate: crate_id,
196194
index: CRATE_DEF_INDEX,
197195
};
198-
let def = Def::Mod(def_id);
199-
let module = self.new_extern_crate_module(parent, name, def, item.id);
196+
let module = self.arenas.alloc_module(ModuleS {
197+
extern_crate_id: Some(item.id),
198+
populated: Cell::new(false),
199+
..ModuleS::new(Some(parent), ModuleKind::Def(Def::Mod(def_id), name))
200+
});
200201
self.define(parent, name, TypeNS, (module, sp, vis));
201202

202203
self.populate_module_if_necessary(module);
@@ -205,10 +206,12 @@ impl<'b> Resolver<'b> {
205206

206207
ItemKind::Mod(..) => {
207208
let def = Def::Mod(self.definitions.local_def_id(item.id));
208-
let module = self.new_module(parent, ModuleKind::Def(def, name), Some(item.id));
209-
module.no_implicit_prelude.set({
210-
parent.no_implicit_prelude.get() ||
209+
let module = self.arenas.alloc_module(ModuleS {
210+
no_implicit_prelude: parent.no_implicit_prelude || {
211211
attr::contains_name(&item.attrs, "no_implicit_prelude")
212+
},
213+
normal_ancestor_id: Some(item.id),
214+
..ModuleS::new(Some(parent), ModuleKind::Def(def, name))
212215
});
213216
self.define(parent, name, TypeNS, (module, sp, vis));
214217
self.module_map.insert(item.id, module);
@@ -241,8 +244,8 @@ impl<'b> Resolver<'b> {
241244
}
242245

243246
ItemKind::Enum(ref enum_definition, _) => {
244-
let kind = ModuleKind::Def(Def::Enum(self.definitions.local_def_id(item.id)), name);
245-
let module = self.new_module(parent, kind, parent.normal_ancestor_id);
247+
let def = Def::Enum(self.definitions.local_def_id(item.id));
248+
let module = self.new_module(parent, ModuleKind::Def(def, name), true);
246249
self.define(parent, name, TypeNS, (module, sp, vis));
247250

248251
for variant in &(*enum_definition).variants {
@@ -293,8 +296,8 @@ impl<'b> Resolver<'b> {
293296
let def_id = self.definitions.local_def_id(item.id);
294297

295298
// Add all the items within to a new module.
296-
let kind = ModuleKind::Def(Def::Trait(def_id), name);
297-
let module = self.new_module(parent, kind, parent.normal_ancestor_id);
299+
let module =
300+
self.new_module(parent, ModuleKind::Def(Def::Trait(def_id), name), true);
298301
self.define(parent, name, TypeNS, (module, sp, vis));
299302
self.current_module = module;
300303
}
@@ -348,8 +351,7 @@ impl<'b> Resolver<'b> {
348351
{}",
349352
block_id);
350353

351-
let new_module =
352-
self.new_module(parent, ModuleKind::Block(block_id), parent.normal_ancestor_id);
354+
let new_module = self.new_module(parent, ModuleKind::Block(block_id), true);
353355
self.module_map.insert(block_id, new_module);
354356
self.current_module = new_module; // Descend into the block.
355357
}
@@ -377,7 +379,7 @@ impl<'b> Resolver<'b> {
377379
Def::Mod(_) | Def::Enum(..) => {
378380
debug!("(building reduced graph for external crate) building module {} {:?}",
379381
name, vis);
380-
let module = self.new_module(parent, ModuleKind::Def(def, name), None);
382+
let module = self.new_module(parent, ModuleKind::Def(def, name), false);
381383
let _ = self.try_define(parent, name, TypeNS, (module, DUMMY_SP, vis));
382384
}
383385
Def::Variant(variant_id) => {
@@ -420,7 +422,7 @@ impl<'b> Resolver<'b> {
420422
self.trait_item_map.insert((trait_item_name, def_id), false);
421423
}
422424

423-
let module = self.new_module(parent, ModuleKind::Def(def, name), None);
425+
let module = self.new_module(parent, ModuleKind::Def(def, name), false);
424426
let _ = self.try_define(parent, name, TypeNS, (module, DUMMY_SP, vis));
425427
}
426428
Def::TyAlias(..) | Def::AssociatedTy(..) => {

src/librustc_resolve/lib.rs

+21-23
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ use syntax::parse::token::{self, keywords};
6060
use syntax::util::lev_distance::find_best_match_for_name;
6161

6262
use syntax::visit::{self, FnKind, Visitor};
63+
use syntax::attr;
6364
use syntax::ast::{Arm, BindingMode, Block, Crate, Expr, ExprKind};
6465
use syntax::ast::{FnDecl, ForeignItem, ForeignItemKind, Generics};
6566
use syntax::ast::{Item, ItemKind, ImplItem, ImplItemKind};
@@ -771,7 +772,7 @@ pub struct ModuleS<'a> {
771772

772773
resolutions: RefCell<FnvHashMap<(Name, Namespace), &'a RefCell<NameResolution<'a>>>>,
773774

774-
no_implicit_prelude: Cell<bool>,
775+
no_implicit_prelude: bool,
775776

776777
glob_importers: RefCell<Vec<&'a ImportDirective<'a>>>,
777778
globs: RefCell<Vec<&'a ImportDirective<'a>>>,
@@ -788,19 +789,18 @@ pub struct ModuleS<'a> {
788789
pub type Module<'a> = &'a ModuleS<'a>;
789790

790791
impl<'a> ModuleS<'a> {
791-
fn new(parent: Option<Module<'a>>, kind: ModuleKind, normal_ancestor_id: Option<NodeId>)
792-
-> Self {
792+
fn new(parent: Option<Module<'a>>, kind: ModuleKind) -> Self {
793793
ModuleS {
794794
parent: parent,
795795
kind: kind,
796-
normal_ancestor_id: normal_ancestor_id,
796+
normal_ancestor_id: None,
797797
extern_crate_id: None,
798798
resolutions: RefCell::new(FnvHashMap()),
799-
no_implicit_prelude: Cell::new(false),
799+
no_implicit_prelude: false,
800800
glob_importers: RefCell::new(Vec::new()),
801801
globs: RefCell::new((Vec::new())),
802802
traits: RefCell::new(None),
803-
populated: Cell::new(normal_ancestor_id.is_some()),
803+
populated: Cell::new(true),
804804
}
805805
}
806806

@@ -1170,14 +1170,17 @@ impl Named for hir::PathSegment {
11701170

11711171
impl<'a> Resolver<'a> {
11721172
pub fn new(session: &'a Session,
1173+
krate: &Crate,
11731174
make_glob_map: MakeGlobMap,
11741175
macro_loader: &'a mut MacroLoader,
11751176
arenas: &'a ResolverArenas<'a>)
11761177
-> Resolver<'a> {
1177-
let graph_root_kind =
1178-
ModuleKind::Def(Def::Mod(DefId::local(CRATE_DEF_INDEX)), keywords::Invalid.name());
1179-
let graph_root =
1180-
arenas.alloc_module(ModuleS::new(None, graph_root_kind, Some(CRATE_NODE_ID)));
1178+
let root_def = Def::Mod(DefId::local(CRATE_DEF_INDEX));
1179+
let graph_root = arenas.alloc_module(ModuleS {
1180+
normal_ancestor_id: Some(CRATE_NODE_ID),
1181+
no_implicit_prelude: attr::contains_name(&krate.attrs, "no_implicit_prelude"),
1182+
..ModuleS::new(None, ModuleKind::Def(root_def, keywords::Invalid.name()))
1183+
});
11811184
let mut module_map = NodeMap();
11821185
module_map.insert(CRATE_NODE_ID, graph_root);
11831186

@@ -1259,17 +1262,12 @@ impl<'a> Resolver<'a> {
12591262
self.report_errors();
12601263
}
12611264

1262-
fn new_module(&self, parent: Module<'a>, kind: ModuleKind, normal_ancestor_id: Option<NodeId>)
1263-
-> Module<'a> {
1264-
self.arenas.alloc_module(ModuleS::new(Some(parent), kind, normal_ancestor_id))
1265-
}
1266-
1267-
fn new_extern_crate_module(&self, parent: Module<'a>, name: Name, def: Def, node_id: NodeId)
1268-
-> Module<'a> {
1269-
let mut module = ModuleS::new(Some(parent), ModuleKind::Def(def, name), Some(node_id));
1270-
module.extern_crate_id = Some(node_id);
1271-
module.populated.set(false);
1272-
self.arenas.modules.alloc(module)
1265+
fn new_module(&self, parent: Module<'a>, kind: ModuleKind, local: bool) -> Module<'a> {
1266+
self.arenas.alloc_module(ModuleS {
1267+
normal_ancestor_id: if local { self.current_module.normal_ancestor_id } else { None },
1268+
populated: Cell::new(local),
1269+
..ModuleS::new(Some(parent), kind)
1270+
})
12731271
}
12741272

12751273
fn get_ribs<'b>(&'b mut self, ns: Namespace) -> &'b mut Vec<Rib<'a>> {
@@ -1509,7 +1507,7 @@ impl<'a> Resolver<'a> {
15091507
}
15101508

15111509
if let ModuleKind::Block(..) = module.kind { // We can see through blocks
1512-
} else if !module.no_implicit_prelude.get() {
1510+
} else if !module.no_implicit_prelude {
15131511
return self.prelude.and_then(|prelude| {
15141512
self.resolve_name_in_module(prelude, name, ns, false, None).success()
15151513
}).map(LexicalScopeBinding::Item)
@@ -3156,7 +3154,7 @@ impl<'a> Resolver<'a> {
31563154
if let ModuleKind::Block(..) = search_module.kind {
31573155
search_module = search_module.parent.unwrap();
31583156
} else {
3159-
if !search_module.no_implicit_prelude.get() {
3157+
if !search_module.no_implicit_prelude {
31603158
self.prelude.map(|prelude| search_in_module(self, prelude));
31613159
}
31623160
break;

0 commit comments

Comments
 (0)