Skip to content

Commit c1362d8

Browse files
committed
Clean up build_reduced_graph.rs.
1 parent 37154ca commit c1362d8

File tree

1 file changed

+18
-26
lines changed

1 file changed

+18
-26
lines changed

src/librustc_resolve/build_reduced_graph.rs

Lines changed: 18 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,7 @@ impl<'b> Resolver<'b> {
5656
pub fn build_reduced_graph(&mut self, krate: &Crate) {
5757
let no_implicit_prelude = attr::contains_name(&krate.attrs, "no_implicit_prelude");
5858
self.graph_root.no_implicit_prelude.set(no_implicit_prelude);
59-
60-
let mut visitor = BuildReducedGraphVisitor {
61-
parent: self.graph_root,
62-
resolver: self,
63-
};
64-
visit::walk_crate(&mut visitor, krate);
59+
visit::walk_crate(&mut BuildReducedGraphVisitor { resolver: self }, krate);
6560
}
6661

6762
/// Defines `name` in namespace `ns` of module `parent` to be `def` if it is not yet defined;
@@ -84,11 +79,10 @@ impl<'b> Resolver<'b> {
8479
}
8580

8681
/// Constructs the reduced graph for one item.
87-
fn build_reduced_graph_for_item(&mut self, item: &Item, parent_ref: &mut Module<'b>) {
88-
let parent = *parent_ref;
82+
fn build_reduced_graph_for_item(&mut self, item: &Item) {
83+
let parent = self.current_module;
8984
let name = item.ident.name;
9085
let sp = item.span;
91-
self.current_module = parent;
9286
let vis = self.resolve_visibility(&item.vis);
9387

9488
match item.node {
@@ -213,7 +207,7 @@ impl<'b> Resolver<'b> {
213207
});
214208
self.define(parent, name, TypeNS, (module, sp, vis));
215209
self.module_map.insert(item.id, module);
216-
*parent_ref = module;
210+
self.current_module = module; // Descend into the module.
217211
}
218212

219213
ItemKind::ForeignMod(..) => {}
@@ -306,6 +300,9 @@ impl<'b> Resolver<'b> {
306300
}
307301
ItemKind::Mac(_) => panic!("unexpanded macro in resolve!"),
308302
}
303+
304+
visit::walk_item(&mut BuildReducedGraphVisitor { resolver: self }, item);
305+
self.current_module = parent;
309306
}
310307

311308
// Constructs the reduced graph for one variant. Variants exist in the
@@ -330,9 +327,8 @@ impl<'b> Resolver<'b> {
330327
}
331328

332329
/// Constructs the reduced graph for one foreign item.
333-
fn build_reduced_graph_for_foreign_item(&mut self,
334-
foreign_item: &ForeignItem,
335-
parent: Module<'b>) {
330+
fn build_reduced_graph_for_foreign_item(&mut self, foreign_item: &ForeignItem) {
331+
let parent = self.current_module;
336332
let name = foreign_item.ident.name;
337333

338334
let def = match foreign_item.node {
@@ -343,12 +339,12 @@ impl<'b> Resolver<'b> {
343339
Def::Static(self.definitions.local_def_id(foreign_item.id), m)
344340
}
345341
};
346-
self.current_module = parent;
347342
let vis = self.resolve_visibility(&foreign_item.vis);
348343
self.define(parent, name, ValueNS, (def, foreign_item.span, vis));
349344
}
350345

351-
fn build_reduced_graph_for_block(&mut self, block: &Block, parent: &mut Module<'b>) {
346+
fn build_reduced_graph_for_block(&mut self, block: &Block) {
347+
let parent = self.current_module;
352348
if self.block_needs_anonymous_module(block) {
353349
let block_id = block.id;
354350

@@ -359,8 +355,11 @@ impl<'b> Resolver<'b> {
359355
let parent_link = BlockParentLink(parent, block_id);
360356
let new_module = self.new_module(parent_link, None, false);
361357
self.module_map.insert(block_id, new_module);
362-
*parent = new_module;
358+
self.current_module = new_module; // Descend into the block.
363359
}
360+
361+
visit::walk_block(&mut BuildReducedGraphVisitor { resolver: self }, block);
362+
self.current_module = parent;
364363
}
365364

366365
/// Builds the reduced graph for a single item in an external crate.
@@ -484,25 +483,18 @@ impl<'b> Resolver<'b> {
484483

485484
struct BuildReducedGraphVisitor<'a, 'b: 'a> {
486485
resolver: &'a mut Resolver<'b>,
487-
parent: Module<'b>,
488486
}
489487

490488
impl<'a, 'b> Visitor for BuildReducedGraphVisitor<'a, 'b> {
491489
fn visit_item(&mut self, item: &Item) {
492-
let old_parent = self.parent;
493-
self.resolver.build_reduced_graph_for_item(item, &mut self.parent);
494-
visit::walk_item(self, item);
495-
self.parent = old_parent;
490+
self.resolver.build_reduced_graph_for_item(item);
496491
}
497492

498493
fn visit_foreign_item(&mut self, foreign_item: &ForeignItem) {
499-
self.resolver.build_reduced_graph_for_foreign_item(foreign_item, &self.parent);
494+
self.resolver.build_reduced_graph_for_foreign_item(foreign_item);
500495
}
501496

502497
fn visit_block(&mut self, block: &Block) {
503-
let old_parent = self.parent;
504-
self.resolver.build_reduced_graph_for_block(block, &mut self.parent);
505-
visit::walk_block(self, block);
506-
self.parent = old_parent;
498+
self.resolver.build_reduced_graph_for_block(block);
507499
}
508500
}

0 commit comments

Comments
 (0)