@@ -868,6 +868,7 @@ impl<'a, 'b> BuildReducedGraphVisitor<'a, 'b> {
868
868
// This is only a guess, two equivalent idents may incorrectly get different gensyms here.
869
869
let ident = ident. gensym_if_underscore ( ) ;
870
870
let expansion = ExpnId :: root ( ) ; // FIXME(jseyfried) intercrate hygiene
871
+ // Record primary definitions.
871
872
match res {
872
873
Res :: Def ( kind @ DefKind :: Mod , def_id)
873
874
| Res :: Def ( kind @ DefKind :: Enum , def_id)
@@ -879,51 +880,50 @@ impl<'a, 'b> BuildReducedGraphVisitor<'a, 'b> {
879
880
span) ;
880
881
self . r . define ( parent, ident, TypeNS , ( module, vis, DUMMY_SP , expansion) ) ;
881
882
}
882
- Res :: Def ( DefKind :: Variant , _)
883
+ Res :: Def ( DefKind :: Struct , _)
884
+ | Res :: Def ( DefKind :: Union , _)
885
+ | Res :: Def ( DefKind :: Variant , _)
883
886
| Res :: Def ( DefKind :: TyAlias , _)
884
887
| Res :: Def ( DefKind :: ForeignTy , _)
885
888
| Res :: Def ( DefKind :: OpaqueTy , _)
886
889
| Res :: Def ( DefKind :: TraitAlias , _)
887
890
| Res :: Def ( DefKind :: AssocTy , _)
888
891
| Res :: Def ( DefKind :: AssocOpaqueTy , _)
889
892
| Res :: PrimTy ( ..)
890
- | Res :: ToolMod => {
891
- self . r . define ( parent, ident, TypeNS , ( res, vis, DUMMY_SP , expansion) ) ;
892
- }
893
+ | Res :: ToolMod =>
894
+ self . r . define ( parent, ident, TypeNS , ( res, vis, DUMMY_SP , expansion) ) ,
893
895
Res :: Def ( DefKind :: Fn , _)
896
+ | Res :: Def ( DefKind :: Method , _)
894
897
| Res :: Def ( DefKind :: Static , _)
895
898
| Res :: Def ( DefKind :: Const , _)
896
899
| Res :: Def ( DefKind :: AssocConst , _)
897
- | Res :: Def ( DefKind :: Ctor ( CtorOf :: Variant , ..) , _) => {
898
- self . r . define ( parent, ident, ValueNS , ( res, vis, DUMMY_SP , expansion) ) ;
899
- }
900
- Res :: Def ( DefKind :: Ctor ( CtorOf :: Struct , ..) , def_id) => {
901
- self . r . define ( parent, ident, ValueNS , ( res, vis, DUMMY_SP , expansion) ) ;
902
-
903
- if let Some ( struct_def_id) =
904
- self . r . cstore . def_key ( def_id) . parent
905
- . map ( |index| DefId { krate : def_id. krate , index : index } ) {
906
- self . r . struct_constructors . insert ( struct_def_id, ( res, vis) ) ;
907
- }
900
+ | Res :: Def ( DefKind :: Ctor ( ..) , _) =>
901
+ self . r . define ( parent, ident, ValueNS , ( res, vis, DUMMY_SP , expansion) ) ,
902
+ Res :: Def ( DefKind :: Macro ( ..) , _)
903
+ | Res :: NonMacroAttr ( ..) =>
904
+ self . r . define ( parent, ident, MacroNS , ( res, vis, DUMMY_SP , expansion) ) ,
905
+ Res :: Def ( DefKind :: TyParam , _) | Res :: Def ( DefKind :: ConstParam , _)
906
+ | Res :: Local ( ..) | Res :: SelfTy ( ..) | Res :: SelfCtor ( ..) | Res :: Err =>
907
+ bug ! ( "unexpected resolution: {:?}" , res)
908
+ }
909
+ // Record some extra data for better diagnostics.
910
+ match res {
911
+ Res :: Def ( DefKind :: Struct , def_id) | Res :: Def ( DefKind :: Union , def_id) => {
912
+ let field_names = self . r . cstore . struct_field_names_untracked ( def_id) ;
913
+ self . insert_field_names ( def_id, field_names) ;
908
914
}
909
915
Res :: Def ( DefKind :: Method , def_id) => {
910
- self . r . define ( parent, ident, ValueNS , ( res, vis, DUMMY_SP , expansion) ) ;
911
-
912
916
if self . r . cstore . associated_item_cloned_untracked ( def_id) . method_has_self_argument {
913
917
self . r . has_self . insert ( def_id) ;
914
918
}
915
919
}
916
- Res :: Def ( DefKind :: Struct , def_id) | Res :: Def ( DefKind :: Union , def_id) => {
917
- self . r . define ( parent, ident, TypeNS , ( res, vis, DUMMY_SP , expansion) ) ;
918
-
919
- // Record field names for error reporting.
920
- let field_names = self . r . cstore . struct_field_names_untracked ( def_id) ;
921
- self . insert_field_names ( def_id, field_names) ;
922
- }
923
- Res :: Def ( DefKind :: Macro ( ..) , _) | Res :: NonMacroAttr ( ..) => {
924
- self . r . define ( parent, ident, MacroNS , ( res, vis, DUMMY_SP , expansion) ) ;
920
+ Res :: Def ( DefKind :: Ctor ( CtorOf :: Struct , ..) , def_id) => {
921
+ let parent = self . r . cstore . def_key ( def_id) . parent ;
922
+ if let Some ( struct_def_id) = parent. map ( |index| DefId { index, ..def_id } ) {
923
+ self . r . struct_constructors . insert ( struct_def_id, ( res, vis) ) ;
924
+ }
925
925
}
926
- _ => bug ! ( "unexpected resolution: {:?}" , res )
926
+ _ => { }
927
927
}
928
928
}
929
929
0 commit comments