@@ -642,6 +642,7 @@ impl<'a> Resolver<'a> {
642
642
// This is only a guess, two equivalent idents may incorrectly get different gensyms here.
643
643
let ident = ident. gensym_if_underscore ( ) ;
644
644
let expansion = ExpnId :: root ( ) ; // FIXME(jseyfried) intercrate hygiene
645
+ // Record primary definitions.
645
646
match res {
646
647
Res :: Def ( kind @ DefKind :: Mod , def_id)
647
648
| Res :: Def ( kind @ DefKind :: Enum , def_id)
@@ -651,53 +652,52 @@ impl<'a> Resolver<'a> {
651
652
def_id,
652
653
expansion,
653
654
span) ;
654
- self . define ( parent, ident, TypeNS , ( module, vis, DUMMY_SP , expansion) ) ;
655
+ self . define ( parent, ident, TypeNS , ( module, vis, span , expansion) ) ;
655
656
}
656
- Res :: Def ( DefKind :: Variant , _)
657
+ Res :: Def ( DefKind :: Struct , _)
658
+ | Res :: Def ( DefKind :: Union , _)
659
+ | Res :: Def ( DefKind :: Variant , _)
657
660
| Res :: Def ( DefKind :: TyAlias , _)
658
661
| Res :: Def ( DefKind :: ForeignTy , _)
659
662
| Res :: Def ( DefKind :: OpaqueTy , _)
660
663
| Res :: Def ( DefKind :: TraitAlias , _)
661
664
| Res :: Def ( DefKind :: AssocTy , _)
662
- | Res :: Def ( DefKind :: AssocExistential , _)
665
+ | Res :: Def ( DefKind :: AssocOpaqueTy , _)
663
666
| Res :: PrimTy ( ..)
664
- | Res :: ToolMod => {
665
- self . define ( parent, ident, TypeNS , ( res, vis, DUMMY_SP , expansion) ) ;
666
- }
667
+ | Res :: ToolMod =>
668
+ self . define ( parent, ident, TypeNS , ( res, vis, span, expansion) ) ,
667
669
Res :: Def ( DefKind :: Fn , _)
670
+ | Res :: Def ( DefKind :: Method , _)
668
671
| Res :: Def ( DefKind :: Static , _)
669
672
| Res :: Def ( DefKind :: Const , _)
670
673
| Res :: Def ( DefKind :: AssocConst , _)
671
- | Res :: Def ( DefKind :: Ctor ( CtorOf :: Variant , ..) , _) => {
672
- self . define ( parent, ident, ValueNS , ( res, vis, DUMMY_SP , expansion) ) ;
673
- }
674
- Res :: Def ( DefKind :: Ctor ( CtorOf :: Struct , ..) , def_id) => {
675
- self . define ( parent, ident, ValueNS , ( res, vis, DUMMY_SP , expansion) ) ;
676
-
677
- if let Some ( struct_def_id) =
678
- self . cstore . def_key ( def_id) . parent
679
- . map ( |index| DefId { krate : def_id. krate , index : index } ) {
680
- self . struct_constructors . insert ( struct_def_id, ( res, vis) ) ;
681
- }
674
+ | Res :: Def ( DefKind :: Ctor ( ..) , _) =>
675
+ self . define ( parent, ident, ValueNS , ( res, vis, span, expansion) ) ,
676
+ Res :: Def ( DefKind :: Macro ( ..) , _)
677
+ | Res :: NonMacroAttr ( ..) =>
678
+ self . define ( parent, ident, MacroNS , ( res, vis, span, expansion) ) ,
679
+ Res :: Def ( DefKind :: TyParam , _) | Res :: Def ( DefKind :: ConstParam , _)
680
+ | Res :: Local ( ..) | Res :: SelfTy ( ..) | Res :: SelfCtor ( ..) | Res :: Err =>
681
+ bug ! ( "unexpected resolution: {:?}" , res)
682
+ }
683
+ // Record some extra data for better diagnostics.
684
+ match res {
685
+ Res :: Def ( DefKind :: Struct , def_id) | Res :: Def ( DefKind :: Union , def_id) => {
686
+ let field_names = self . cstore . struct_field_names_untracked ( def_id) ;
687
+ self . insert_field_names ( def_id, field_names) ;
682
688
}
683
689
Res :: Def ( DefKind :: Method , def_id) => {
684
- self . define ( parent, ident, ValueNS , ( res, vis, DUMMY_SP , expansion) ) ;
685
-
686
690
if self . cstore . associated_item_cloned_untracked ( def_id) . method_has_self_argument {
687
691
self . has_self . insert ( def_id) ;
688
692
}
689
693
}
690
- Res :: Def ( DefKind :: Struct , def_id) | Res :: Def ( DefKind :: Union , def_id) => {
691
- self . define ( parent, ident, TypeNS , ( res, vis, DUMMY_SP , expansion) ) ;
692
-
693
- // Record field names for error reporting.
694
- let field_names = self . cstore . struct_field_names_untracked ( def_id) ;
695
- self . insert_field_names ( def_id, field_names) ;
696
- }
697
- Res :: Def ( DefKind :: Macro ( ..) , _) | Res :: NonMacroAttr ( ..) => {
698
- self . define ( parent, ident, MacroNS , ( res, vis, DUMMY_SP , expansion) ) ;
694
+ Res :: Def ( DefKind :: Ctor ( CtorOf :: Struct , ..) , def_id) => {
695
+ let parent = self . cstore . def_key ( def_id) . parent ;
696
+ if let Some ( struct_def_id) = parent. map ( |index| DefId { index, ..def_id } ) {
697
+ self . struct_constructors . insert ( struct_def_id, ( res, vis) ) ;
698
+ }
699
699
}
700
- _ => bug ! ( "unexpected resolution: {:?}" , res )
700
+ _ => { }
701
701
}
702
702
}
703
703
@@ -837,7 +837,7 @@ impl<'a> Resolver<'a> {
837
837
if let Some ( span) = import_all {
838
838
let directive = macro_use_directive ( span) ;
839
839
self . potentially_unused_imports . push ( directive) ;
840
- module . for_each_child ( self , |this, ident, ns, binding| if ns == MacroNS {
840
+ self . for_each_child ( module , |this, ident, ns, binding| if ns == MacroNS {
841
841
let imported_binding = this. import ( binding, directive) ;
842
842
this. legacy_import_macro ( ident. name , imported_binding, span, allow_shadowing) ;
843
843
} ) ;
0 commit comments