@@ -582,31 +582,22 @@ impl<'a> Resolver<'a> {
582
582
vis : ty:: Visibility ,
583
583
expansion : Mark ) {
584
584
let ident = variant. node . ident ;
585
- let def_id = self . definitions . local_def_id ( variant. node . id ) ;
586
585
587
586
// Define a name in the type namespace.
587
+ let def_id = self . definitions . local_def_id ( variant. node . id ) ;
588
588
let def = Def :: Variant ( def_id) ;
589
589
self . define ( parent, ident, TypeNS , ( def, vis, variant. span , expansion) ) ;
590
590
591
591
// Define a constructor name in the value namespace.
592
592
// Braced variants, unlike structs, generate unusable names in
593
593
// value namespace, they are reserved for possible future use.
594
- if let Some ( ctor_node_id) = variant. node . data . ctor_id ( ) {
595
- let ctor_def_id = self . definitions . local_def_id ( ctor_node_id) ;
596
- let ctor_kind = CtorKind :: from_ast ( & variant. node . data ) ;
597
- let ctor_def = Def :: Ctor ( hir:: CtorOf :: Variant , ctor_def_id, ctor_kind) ;
598
-
599
- self . define ( parent, ident, ValueNS , ( ctor_def, vis, variant. span , expansion) ) ;
600
- } else {
601
- // We normally don't have a `Def::Ctor(hir::CtorOf::Variant, ..)` for
602
- // `Struct`-variants, but we must define one for name resolution to succeed. This also
603
- // takes place in `build_reduced_graph_for_external_crate_def`.
604
- let def_id = self . definitions . local_def_id ( variant. node . id ) ;
605
- let ctor_kind = CtorKind :: from_ast ( & variant. node . data ) ;
606
- let ctor_def = Def :: Ctor ( hir:: CtorOf :: Variant , def_id, ctor_kind) ;
607
-
608
- self . define ( parent, ident, ValueNS , ( ctor_def, vis, variant. span , expansion) ) ;
609
- }
594
+ // It's ok to use the variant's id as a ctor id since an
595
+ // error will be reported on any use of such resolution anyway.
596
+ let ctor_node_id = variant. node . data . ctor_id ( ) . unwrap_or ( variant. node . id ) ;
597
+ let ctor_def_id = self . definitions . local_def_id ( ctor_node_id) ;
598
+ let ctor_kind = CtorKind :: from_ast ( & variant. node . data ) ;
599
+ let ctor_def = Def :: Ctor ( hir:: CtorOf :: Variant , ctor_def_id, ctor_kind) ;
600
+ self . define ( parent, ident, ValueNS , ( ctor_def, vis, variant. span , expansion) ) ;
610
601
}
611
602
612
603
/// Constructs the reduced graph for one foreign item.
@@ -658,27 +649,13 @@ impl<'a> Resolver<'a> {
658
649
span) ;
659
650
self . define ( parent, ident, TypeNS , ( module, vis, DUMMY_SP , expansion) ) ;
660
651
}
661
- Def :: Variant ( def_id) => {
652
+ Def :: Variant ( ..) | Def :: TyAlias ( ..) | Def :: ForeignTy ( ..) | Def :: Existential ( ..) |
653
+ Def :: TraitAlias ( ..) | Def :: PrimTy ( ..) | Def :: ToolMod => {
662
654
self . define ( parent, ident, TypeNS , ( def, vis, DUMMY_SP , expansion) ) ;
663
-
664
- if hir:: def:: CtorKind :: Fictive == self . cstore . ctor_kind_untracked ( def_id) {
665
- // We do not normally generate `Def::Ctor(hir::CtorOf::Variant, ..)` for
666
- // `Struct`-variants. Therefore, `build_reduced_graph_for_external_crate_def`
667
- // will not be called to define one. However, name resolution currently expects
668
- // there to be one, so we generate one here. This is easy to solve for local
669
- // code, see `build_reduced_graph_for_variant` for this case.
670
- let ctor_def = Def :: Ctor ( hir:: CtorOf :: Variant , def_id,
671
- hir:: def:: CtorKind :: Fictive ) ;
672
-
673
- let _ = self . try_define (
674
- parent, ident, ValueNS ,
675
- ( ctor_def, vis, DUMMY_SP , expansion) . to_name_binding ( self . arenas ) ,
676
- ) ;
677
- }
678
655
}
679
- Def :: TyAlias ( ..) | Def :: ForeignTy ( ..) | Def :: Existential ( .. ) | Def :: TraitAlias ( ..) |
680
- Def :: PrimTy ( ..) | Def :: ToolMod => {
681
- self . define ( parent, ident, TypeNS , ( def, vis, DUMMY_SP , expansion) ) ;
656
+ Def :: Fn ( ..) | Def :: Static ( ..) | Def :: Const ( ..) |
657
+ Def :: Ctor ( hir :: CtorOf :: Variant , ..) => {
658
+ self . define ( parent, ident, ValueNS , ( def, vis, DUMMY_SP , expansion) ) ;
682
659
}
683
660
Def :: Ctor ( hir:: CtorOf :: Struct , def_id, ..) => {
684
661
self . define ( parent, ident, ValueNS , ( def, vis, DUMMY_SP , expansion) ) ;
@@ -689,15 +666,6 @@ impl<'a> Resolver<'a> {
689
666
self . struct_constructors . insert ( struct_def_id, ( def, vis) ) ;
690
667
}
691
668
}
692
- Def :: Ctor ( hir:: CtorOf :: Variant , ..) => {
693
- let _ = self . try_define (
694
- parent, ident, ValueNS ,
695
- ( def, vis, DUMMY_SP , expansion) . to_name_binding ( self . arenas ) ,
696
- ) ;
697
- }
698
- Def :: Fn ( ..) | Def :: Static ( ..) | Def :: Const ( ..) => {
699
- self . define ( parent, ident, ValueNS , ( def, vis, DUMMY_SP , expansion) ) ;
700
- }
701
669
Def :: Trait ( def_id) => {
702
670
let module_kind = ModuleKind :: Def ( def, ident. name ) ;
703
671
let module = self . new_module ( parent,
0 commit comments