@@ -1089,63 +1089,32 @@ impl<'a, 'tcx> CrateMetadataRef<'a> {
10891089 // Iterate over all children.
10901090 if let Some ( children) = self . root . tables . children . get ( self , id) {
10911091 for child_index in children. decode ( ( self , sess) ) {
1092- if let Some ( ident) = self . opt_item_ident ( child_index, sess) {
1093- let kind = self . def_kind ( child_index) ;
1094- let def_id = self . local_def_id ( child_index) ;
1095- let res = Res :: Def ( kind, def_id) ;
1096- let vis = self . get_visibility ( child_index) ;
1097- let span = self . get_span ( child_index, sess) ;
1098- let macro_rules = match kind {
1099- DefKind :: Macro ( ..) => match self . kind ( child_index) {
1100- EntryKind :: MacroDef ( _, macro_rules) => macro_rules,
1101- _ => unreachable ! ( ) ,
1102- } ,
1103- _ => false ,
1104- } ;
1105-
1106- callback ( ModChild { ident, res, vis, span, macro_rules } ) ;
1107-
1108- // For non-re-export structs and variants add their constructors to children.
1109- // Re-export lists automatically contain constructors when necessary.
1110- match kind {
1111- DefKind :: Struct => {
1112- if let Some ( ( ctor_def_id, ctor_kind) ) =
1113- self . get_ctor_def_id_and_kind ( child_index)
1114- {
1115- let ctor_res =
1116- Res :: Def ( DefKind :: Ctor ( CtorOf :: Struct , ctor_kind) , ctor_def_id) ;
1117- let vis = self . get_visibility ( ctor_def_id. index ) ;
1118- callback ( ModChild {
1119- ident,
1120- res : ctor_res,
1121- vis,
1122- span,
1123- macro_rules : false ,
1124- } ) ;
1125- }
1126- }
1127- DefKind :: Variant => {
1128- // Braced variants, unlike structs, generate unusable names in
1129- // value namespace, they are reserved for possible future use.
1130- // It's ok to use the variant's id as a ctor id since an
1131- // error will be reported on any use of such resolution anyway.
1132- let ( ctor_def_id, ctor_kind) = self
1133- . get_ctor_def_id_and_kind ( child_index)
1134- . unwrap_or ( ( def_id, CtorKind :: Fictive ) ) ;
1092+ let ident = self . item_ident ( child_index, sess) ;
1093+ let kind = self . def_kind ( child_index) ;
1094+ let def_id = self . local_def_id ( child_index) ;
1095+ let res = Res :: Def ( kind, def_id) ;
1096+ let vis = self . get_visibility ( child_index) ;
1097+ let span = self . get_span ( child_index, sess) ;
1098+ let macro_rules = match kind {
1099+ DefKind :: Macro ( ..) => match self . kind ( child_index) {
1100+ EntryKind :: MacroDef ( _, macro_rules) => macro_rules,
1101+ _ => unreachable ! ( ) ,
1102+ } ,
1103+ _ => false ,
1104+ } ;
1105+
1106+ callback ( ModChild { ident, res, vis, span, macro_rules } ) ;
1107+
1108+ // For non-re-export structs and variants add their constructors to children.
1109+ // Re-export lists automatically contain constructors when necessary.
1110+ match kind {
1111+ DefKind :: Struct => {
1112+ if let Some ( ( ctor_def_id, ctor_kind) ) =
1113+ self . get_ctor_def_id_and_kind ( child_index)
1114+ {
11351115 let ctor_res =
1136- Res :: Def ( DefKind :: Ctor ( CtorOf :: Variant , ctor_kind) , ctor_def_id) ;
1137- let mut vis = self . get_visibility ( ctor_def_id. index ) ;
1138- if ctor_def_id == def_id && vis. is_public ( ) {
1139- // For non-exhaustive variants lower the constructor visibility to
1140- // within the crate. We only need this for fictive constructors,
1141- // for other constructors correct visibilities
1142- // were already encoded in metadata.
1143- let mut attrs = self . get_item_attrs ( def_id. index , sess) ;
1144- if attrs. any ( |item| item. has_name ( sym:: non_exhaustive) ) {
1145- let crate_def_id = self . local_def_id ( CRATE_DEF_INDEX ) ;
1146- vis = ty:: Visibility :: Restricted ( crate_def_id) ;
1147- }
1148- }
1116+ Res :: Def ( DefKind :: Ctor ( CtorOf :: Struct , ctor_kind) , ctor_def_id) ;
1117+ let vis = self . get_visibility ( ctor_def_id. index ) ;
11491118 callback ( ModChild {
11501119 ident,
11511120 res : ctor_res,
@@ -1154,8 +1123,32 @@ impl<'a, 'tcx> CrateMetadataRef<'a> {
11541123 macro_rules : false ,
11551124 } ) ;
11561125 }
1157- _ => { }
11581126 }
1127+ DefKind :: Variant => {
1128+ // Braced variants, unlike structs, generate unusable names in
1129+ // value namespace, they are reserved for possible future use.
1130+ // It's ok to use the variant's id as a ctor id since an
1131+ // error will be reported on any use of such resolution anyway.
1132+ let ( ctor_def_id, ctor_kind) = self
1133+ . get_ctor_def_id_and_kind ( child_index)
1134+ . unwrap_or ( ( def_id, CtorKind :: Fictive ) ) ;
1135+ let ctor_res =
1136+ Res :: Def ( DefKind :: Ctor ( CtorOf :: Variant , ctor_kind) , ctor_def_id) ;
1137+ let mut vis = self . get_visibility ( ctor_def_id. index ) ;
1138+ if ctor_def_id == def_id && vis. is_public ( ) {
1139+ // For non-exhaustive variants lower the constructor visibility to
1140+ // within the crate. We only need this for fictive constructors,
1141+ // for other constructors correct visibilities
1142+ // were already encoded in metadata.
1143+ let mut attrs = self . get_item_attrs ( def_id. index , sess) ;
1144+ if attrs. any ( |item| item. has_name ( sym:: non_exhaustive) ) {
1145+ let crate_def_id = self . local_def_id ( CRATE_DEF_INDEX ) ;
1146+ vis = ty:: Visibility :: Restricted ( crate_def_id) ;
1147+ }
1148+ }
1149+ callback ( ModChild { ident, res : ctor_res, vis, span, macro_rules : false } ) ;
1150+ }
1151+ _ => { }
11591152 }
11601153 }
11611154 }
0 commit comments