@@ -101,12 +101,15 @@ enum Family {
101101 Mod , // m
102102 ForeignMod , // n
103103 Enum , // t
104- TupleVariant , // v
105104 StructVariant , // V
105+ TupleVariant , // v
106+ UnitVariant , // w
106107 Impl , // i
107- DefaultImpl , // d
108+ DefaultImpl , // d
108109 Trait , // I
109110 Struct , // S
111+ TupleStruct , // s
112+ UnitStruct , // u
110113 PublicField , // g
111114 InheritedField , // N
112115 Constant , // C
@@ -126,12 +129,15 @@ fn item_family(item: rbml::Doc) -> Family {
126129 'm' => Mod ,
127130 'n' => ForeignMod ,
128131 't' => Enum ,
129- 'v' => TupleVariant ,
130132 'V' => StructVariant ,
133+ 'v' => TupleVariant ,
134+ 'w' => UnitVariant ,
131135 'i' => Impl ,
132136 'd' => DefaultImpl ,
133137 'I' => Trait ,
134138 'S' => Struct ,
139+ 's' => TupleStruct ,
140+ 'u' => UnitStruct ,
135141 'g' => PublicField ,
136142 'N' => InheritedField ,
137143 c => panic ! ( "unexpected family char: {}" , c)
@@ -282,7 +288,7 @@ fn item_to_def_like(cdata: Cmd, item: rbml::Doc, did: DefId) -> DefLike {
282288 }
283289 ImmStatic => DlDef ( def:: DefStatic ( did, false ) ) ,
284290 MutStatic => DlDef ( def:: DefStatic ( did, true ) ) ,
285- Struct => DlDef ( def:: DefStruct ( did) ) ,
291+ Struct | TupleStruct | UnitStruct => DlDef ( def:: DefStruct ( did) ) ,
286292 Fn => DlDef ( def:: DefFn ( did, false ) ) ,
287293 CtorFn => DlDef ( def:: DefFn ( did, true ) ) ,
288294 Method | StaticMethod => {
@@ -302,7 +308,7 @@ fn item_to_def_like(cdata: Cmd, item: rbml::Doc, did: DefId) -> DefLike {
302308 let enum_did = item_require_parent_item ( cdata, item) ;
303309 DlDef ( def:: DefVariant ( enum_did, did, true ) )
304310 }
305- TupleVariant => {
311+ TupleVariant | UnitVariant => {
306312 let enum_did = item_require_parent_item ( cdata, item) ;
307313 DlDef ( def:: DefVariant ( enum_did, did, false ) )
308314 }
@@ -365,6 +371,14 @@ pub fn get_adt_def<'tcx>(intr: &IdentInterner,
365371 item_id : DefIndex ,
366372 tcx : & ty:: ctxt < ' tcx > ) -> ty:: AdtDefMaster < ' tcx >
367373{
374+ fn family_to_variant_kind < ' tcx > ( family : Family , tcx : & ty:: ctxt < ' tcx > ) -> ty:: VariantKind {
375+ match family {
376+ Struct | StructVariant => ty:: VariantKind :: Struct ,
377+ TupleStruct | TupleVariant => ty:: VariantKind :: Tuple ,
378+ UnitStruct | UnitVariant => ty:: VariantKind :: Unit ,
379+ _ => tcx. sess . bug ( & format ! ( "unexpected family: {:?}" , family) ) ,
380+ }
381+ }
368382 fn get_enum_variants < ' tcx > ( intr : & IdentInterner ,
369383 cdata : Cmd ,
370384 doc : rbml:: Doc ,
@@ -384,7 +398,8 @@ pub fn get_adt_def<'tcx>(intr: &IdentInterner,
384398 did : did,
385399 name : item_name ( intr, item) ,
386400 fields : get_variant_fields ( intr, cdata, item, tcx) ,
387- disr_val : disr
401+ disr_val : disr,
402+ kind : family_to_variant_kind ( item_family ( item) , tcx) ,
388403 }
389404 } ) . collect ( )
390405 }
@@ -417,7 +432,8 @@ pub fn get_adt_def<'tcx>(intr: &IdentInterner,
417432 did : did,
418433 name : item_name ( intr, doc) ,
419434 fields : get_variant_fields ( intr, cdata, doc, tcx) ,
420- disr_val : 0
435+ disr_val : 0 ,
436+ kind : family_to_variant_kind ( item_family ( doc) , tcx) ,
421437 }
422438 }
423439
@@ -428,7 +444,7 @@ pub fn get_adt_def<'tcx>(intr: &IdentInterner,
428444 ( ty:: AdtKind :: Enum ,
429445 get_enum_variants ( intr, cdata, doc, tcx) )
430446 }
431- Struct => {
447+ Struct | TupleStruct | UnitStruct => {
432448 let ctor_did =
433449 reader:: maybe_get_doc ( doc, tag_items_data_item_struct_ctor) .
434450 map_or ( did, |ctor_doc| translated_def_id ( cdata, ctor_doc) ) ;
0 commit comments