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