Skip to content

resolve: cleanup and groundwork for resolving the AST #33232

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 9 commits into from
Apr 29, 2016
Prev Previous commit
Next Next commit
Refactor away get_trait_name
  • Loading branch information
jseyfried committed Apr 27, 2016
commit 6da115374ffd344f9bc748df36a50b55e61b4ea8
17 changes: 4 additions & 13 deletions src/librustc_resolve/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -829,7 +829,7 @@ pub struct ModuleS<'a> {
globs: RefCell<Vec<&'a ImportDirective<'a>>>,

// Used to memoize the traits in this module for faster searches through all traits in scope.
traits: RefCell<Option<Box<[&'a NameBinding<'a>]>>>,
traits: RefCell<Option<Box<[(Name, &'a NameBinding<'a>)]>>>,

// Whether this module is populated. If not populated, any attempt to
// access the children must be preceded with a
Expand Down Expand Up @@ -1234,14 +1234,6 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
self.glob_map.insert(directive.id, new_set);
}

fn get_trait_name(&self, did: DefId) -> Name {
if let Some(node_id) = self.ast_map.as_local_node_id(did) {
self.ast_map.expect_item(node_id).name
} else {
self.session.cstore.item_name(did)
}
}

/// Resolves the given module path from the given root `module_`.
fn resolve_module_path_from_root(&mut self,
module_: Module<'a>,
Expand Down Expand Up @@ -3146,20 +3138,19 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
let mut traits = module.traits.borrow_mut();
if traits.is_none() {
let mut collected_traits = Vec::new();
module.for_each_child(|_, ns, binding| {
module.for_each_child(|name, ns, binding| {
if ns != TypeNS { return }
if let Some(Def::Trait(_)) = binding.def() {
collected_traits.push(binding);
collected_traits.push((name, binding));
}
});
*traits = Some(collected_traits.into_boxed_slice());
}

for binding in traits.as_ref().unwrap().iter() {
for &(trait_name, binding) in traits.as_ref().unwrap().iter() {
let trait_def_id = binding.def().unwrap().def_id();
if self.trait_item_map.contains_key(&(name, trait_def_id)) {
add_trait_info(&mut found_traits, trait_def_id, name);
let trait_name = self.get_trait_name(trait_def_id);
self.record_use(trait_name, TypeNS, binding);
}
}
Expand Down