@@ -101,12 +101,15 @@ enum Family {
101
101
Mod , // m
102
102
ForeignMod , // n
103
103
Enum , // t
104
- TupleVariant , // v
105
104
StructVariant , // V
105
+ TupleVariant , // v
106
+ UnitVariant , // w
106
107
Impl , // i
107
- DefaultImpl , // d
108
+ DefaultImpl , // d
108
109
Trait , // I
109
110
Struct , // S
111
+ TupleStruct , // s
112
+ UnitStruct , // u
110
113
PublicField , // g
111
114
InheritedField , // N
112
115
Constant , // C
@@ -126,12 +129,15 @@ fn item_family(item: rbml::Doc) -> Family {
126
129
'm' => Mod ,
127
130
'n' => ForeignMod ,
128
131
't' => Enum ,
129
- 'v' => TupleVariant ,
130
132
'V' => StructVariant ,
133
+ 'v' => TupleVariant ,
134
+ 'w' => UnitVariant ,
131
135
'i' => Impl ,
132
136
'd' => DefaultImpl ,
133
137
'I' => Trait ,
134
138
'S' => Struct ,
139
+ 's' => TupleStruct ,
140
+ 'u' => UnitStruct ,
135
141
'g' => PublicField ,
136
142
'N' => InheritedField ,
137
143
c => panic ! ( "unexpected family char: {}" , c)
@@ -282,7 +288,7 @@ fn item_to_def_like(cdata: Cmd, item: rbml::Doc, did: DefId) -> DefLike {
282
288
}
283
289
ImmStatic => DlDef ( def:: DefStatic ( did, false ) ) ,
284
290
MutStatic => DlDef ( def:: DefStatic ( did, true ) ) ,
285
- Struct => DlDef ( def:: DefStruct ( did) ) ,
291
+ Struct | TupleStruct | UnitStruct => DlDef ( def:: DefStruct ( did) ) ,
286
292
Fn => DlDef ( def:: DefFn ( did, false ) ) ,
287
293
CtorFn => DlDef ( def:: DefFn ( did, true ) ) ,
288
294
Method | StaticMethod => {
@@ -302,7 +308,7 @@ fn item_to_def_like(cdata: Cmd, item: rbml::Doc, did: DefId) -> DefLike {
302
308
let enum_did = item_require_parent_item ( cdata, item) ;
303
309
DlDef ( def:: DefVariant ( enum_did, did, true ) )
304
310
}
305
- TupleVariant => {
311
+ TupleVariant | UnitVariant => {
306
312
let enum_did = item_require_parent_item ( cdata, item) ;
307
313
DlDef ( def:: DefVariant ( enum_did, did, false ) )
308
314
}
@@ -365,6 +371,14 @@ pub fn get_adt_def<'tcx>(intr: &IdentInterner,
365
371
item_id : DefIndex ,
366
372
tcx : & ty:: ctxt < ' tcx > ) -> ty:: AdtDefMaster < ' tcx >
367
373
{
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
+ }
368
382
fn get_enum_variants < ' tcx > ( intr : & IdentInterner ,
369
383
cdata : Cmd ,
370
384
doc : rbml:: Doc ,
@@ -384,7 +398,8 @@ pub fn get_adt_def<'tcx>(intr: &IdentInterner,
384
398
did : did,
385
399
name : item_name ( intr, item) ,
386
400
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) ,
388
403
}
389
404
} ) . collect ( )
390
405
}
@@ -417,7 +432,8 @@ pub fn get_adt_def<'tcx>(intr: &IdentInterner,
417
432
did : did,
418
433
name : item_name ( intr, doc) ,
419
434
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) ,
421
437
}
422
438
}
423
439
@@ -428,7 +444,7 @@ pub fn get_adt_def<'tcx>(intr: &IdentInterner,
428
444
( ty:: AdtKind :: Enum ,
429
445
get_enum_variants ( intr, cdata, doc, tcx) )
430
446
}
431
- Struct => {
447
+ Struct | TupleStruct | UnitStruct => {
432
448
let ctor_did =
433
449
reader:: maybe_get_doc ( doc, tag_items_data_item_struct_ctor) .
434
450
map_or ( did, |ctor_doc| translated_def_id ( cdata, ctor_doc) ) ;
0 commit comments