Skip to content

Commit 4abbfbe

Browse files
committed
resolve: Optimize fn traits_in_module
1 parent e718eb8 commit 4abbfbe

File tree

1 file changed

+6
-7
lines changed
  • compiler/rustc_resolve/src

1 file changed

+6
-7
lines changed

compiler/rustc_resolve/src/lib.rs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -579,7 +579,7 @@ struct ModuleData<'ra> {
579579
globs: RefCell<Vec<Import<'ra>>>,
580580

581581
/// Used to memoize the traits in this module for faster searches through all traits in scope.
582-
traits: RefCell<Option<Box<[(Ident, NameBinding<'ra>)]>>>,
582+
traits: RefCell<Option<Box<[(Ident, NameBinding<'ra>, Option<Module<'ra>>)]>>>,
583583

584584
/// Span of the module itself. Used for error reporting.
585585
span: Span,
@@ -655,12 +655,12 @@ impl<'ra> Module<'ra> {
655655
let mut traits = self.traits.borrow_mut();
656656
if traits.is_none() {
657657
let mut collected_traits = Vec::new();
658-
self.for_each_child(resolver, |_, name, ns, binding| {
658+
self.for_each_child(resolver, |r, name, ns, binding| {
659659
if ns != TypeNS {
660660
return;
661661
}
662-
if let Res::Def(DefKind::Trait | DefKind::TraitAlias, _) = binding.res() {
663-
collected_traits.push((name, binding))
662+
if let Res::Def(DefKind::Trait | DefKind::TraitAlias, def_id) = binding.res() {
663+
collected_traits.push((name, binding, r.as_mut().get_module(def_id)))
664664
}
665665
});
666666
*traits = Some(collected_traits.into_boxed_slice());
@@ -1814,11 +1814,10 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
18141814
) {
18151815
module.ensure_traits(self);
18161816
let traits = module.traits.borrow();
1817-
for (trait_name, trait_binding) in traits.as_ref().unwrap().iter() {
1818-
let trait_module = self.get_module(trait_binding.res().def_id());
1817+
for &(trait_name, trait_binding, trait_module) in traits.as_ref().unwrap().iter() {
18191818
if self.trait_may_have_item(trait_module, assoc_item) {
18201819
let def_id = trait_binding.res().def_id();
1821-
let import_ids = self.find_transitive_imports(&trait_binding.kind, *trait_name);
1820+
let import_ids = self.find_transitive_imports(&trait_binding.kind, trait_name);
18221821
found_traits.push(TraitCandidate { def_id, import_ids });
18231822
}
18241823
}

0 commit comments

Comments
 (0)