Skip to content

Commit 3ee614b

Browse files
committed
resolve: Populate external traits lazily as well
1 parent 0ef7c28 commit 3ee614b

File tree

1 file changed

+9
-22
lines changed

1 file changed

+9
-22
lines changed

src/librustc_resolve/build_reduced_graph.rs

+9-22
Original file line numberDiff line numberDiff line change
@@ -644,7 +644,8 @@ impl<'a> Resolver<'a> {
644644
let expansion = ExpnId::root(); // FIXME(jseyfried) intercrate hygiene
645645
match res {
646646
Res::Def(kind @ DefKind::Mod, def_id)
647-
| Res::Def(kind @ DefKind::Enum, def_id) => {
647+
| Res::Def(kind @ DefKind::Enum, def_id)
648+
| Res::Def(kind @ DefKind::Trait, def_id) => {
648649
let module = self.new_module(parent,
649650
ModuleKind::Def(kind, def_id, ident.name),
650651
def_id,
@@ -657,13 +658,16 @@ impl<'a> Resolver<'a> {
657658
| Res::Def(DefKind::ForeignTy, _)
658659
| Res::Def(DefKind::OpaqueTy, _)
659660
| Res::Def(DefKind::TraitAlias, _)
661+
| Res::Def(DefKind::AssocTy, _)
662+
| Res::Def(DefKind::AssocExistential, _)
660663
| Res::PrimTy(..)
661664
| Res::ToolMod => {
662665
self.define(parent, ident, TypeNS, (res, vis, DUMMY_SP, expansion));
663666
}
664667
Res::Def(DefKind::Fn, _)
665668
| Res::Def(DefKind::Static, _)
666669
| Res::Def(DefKind::Const, _)
670+
| Res::Def(DefKind::AssocConst, _)
667671
| Res::Def(DefKind::Ctor(CtorOf::Variant, ..), _) => {
668672
self.define(parent, ident, ValueNS, (res, vis, DUMMY_SP, expansion));
669673
}
@@ -676,28 +680,11 @@ impl<'a> Resolver<'a> {
676680
self.struct_constructors.insert(struct_def_id, (res, vis));
677681
}
678682
}
679-
Res::Def(DefKind::Trait, def_id) => {
680-
let module_kind = ModuleKind::Def(DefKind::Trait, def_id, ident.name);
681-
let module = self.new_module(parent,
682-
module_kind,
683-
parent.normal_ancestor_id,
684-
expansion,
685-
span);
686-
self.define(parent, ident, TypeNS, (module, vis, DUMMY_SP, expansion));
683+
Res::Def(DefKind::Method, def_id) => {
684+
self.define(parent, ident, ValueNS, (res, vis, DUMMY_SP, expansion));
687685

688-
module.populate_on_access.set(false);
689-
for child in self.cstore.item_children_untracked(def_id, self.session) {
690-
let res = child.res.map_id(|_| panic!("unexpected id"));
691-
let ns = if let Res::Def(DefKind::AssocTy, _) = res {
692-
TypeNS
693-
} else { ValueNS };
694-
self.define(module, child.ident, ns,
695-
(res, ty::Visibility::Public, DUMMY_SP, expansion));
696-
697-
if self.cstore.associated_item_cloned_untracked(child.res.def_id())
698-
.method_has_self_argument {
699-
self.has_self.insert(res.def_id());
700-
}
686+
if self.cstore.associated_item_cloned_untracked(def_id).method_has_self_argument {
687+
self.has_self.insert(def_id);
701688
}
702689
}
703690
Res::Def(DefKind::Struct, def_id) | Res::Def(DefKind::Union, def_id) => {

0 commit comments

Comments
 (0)