@@ -28,7 +28,6 @@ use middle::dependency_format::Linkage;
28
28
use rustc:: dep_graph:: DepNode ;
29
29
use rustc:: traits:: specialization_graph;
30
30
use rustc:: ty:: { self , Ty , TyCtxt } ;
31
- use rustc:: ty:: util:: IntTypeExt ;
32
31
33
32
use rustc:: hir:: svh:: Svh ;
34
33
use rustc:: mir:: mir_map:: MirMap ;
@@ -198,55 +197,53 @@ impl<'a, 'tcx, 'encoder> ItemContentBuilder<'a, 'tcx, 'encoder> {
198
197
}
199
198
200
199
impl < ' a , ' tcx , ' encoder > IndexBuilder < ' a , ' tcx , ' encoder > {
201
- fn encode_enum_variant_info ( & mut self ,
202
- did : DefId ,
203
- vis : & hir:: Visibility ) {
204
- debug ! ( "encode_enum_variant_info(did ={:?})" , did ) ;
200
+ fn encode_enum_variant_infos ( & mut self ,
201
+ enum_did : DefId ,
202
+ vis : & hir:: Visibility ) {
203
+ debug ! ( "encode_enum_variant_info(enum_did ={:?})" , enum_did ) ;
205
204
let ecx = self . ecx ( ) ;
206
- let repr_hints = ecx. tcx . lookup_repr_hints ( did) ;
207
- let repr_type = ecx. tcx . enum_repr_type ( repr_hints. get ( 0 ) ) ;
208
- let mut disr_val = repr_type. initial_discriminant ( ecx. tcx ) ;
209
- let def = ecx. tcx . lookup_adt_def ( did) ;
210
- for variant in & def. variants {
211
- let vid = variant. did ;
212
- let variant_node_id = ecx. local_id ( vid) ;
213
-
205
+ let def = ecx. tcx . lookup_adt_def ( enum_did) ;
206
+ for ( i, variant) in def. variants . iter ( ) . enumerate ( ) {
214
207
for field in & variant. fields {
215
208
self . encode_field ( field) ;
216
209
}
210
+ self . record ( variant. did , |this| this. encode_enum_variant_info ( enum_did, i, vis) ) ;
211
+ }
212
+ }
213
+ }
217
214
218
- self . record ( vid , |this| {
219
- encode_def_id_and_key ( ecx , this . rbml_w , vid ) ;
220
- encode_family ( this . rbml_w , match variant . kind {
221
- ty :: VariantKind :: Struct => 'V' ,
222
- ty :: VariantKind :: Tuple => 'v' ,
223
- ty :: VariantKind :: Unit => 'w' ,
224
- } ) ;
225
- encode_name ( this . rbml_w , variant . name ) ;
226
- this . encode_parent_item ( did) ;
227
- this . encode_visibility ( vis ) ;
228
-
229
- let attrs = ecx . tcx . get_attrs ( vid ) ;
230
- encode_attributes ( this . rbml_w , & attrs ) ;
231
- this . encode_repr_attrs ( & attrs ) ;
232
-
233
- let stab = ecx . tcx . lookup_stability ( vid ) ;
234
- let depr = ecx . tcx . lookup_deprecation ( vid ) ;
235
- encode_stability ( this . rbml_w , stab ) ;
236
- encode_deprecation ( this . rbml_w , depr ) ;
215
+ impl < ' a , ' tcx , ' encoder > ItemContentBuilder < ' a , ' tcx , ' encoder > {
216
+ fn encode_enum_variant_info ( & mut self ,
217
+ enum_did : DefId , // enum def-id
218
+ index : usize , // variant index
219
+ vis : & hir :: Visibility ) {
220
+ let ecx = self . ecx ;
221
+ let def = ecx . tcx . lookup_adt_def ( enum_did ) ;
222
+ let variant = & def . variants [ index ] ;
223
+ let vid = variant . did ;
224
+ let variant_node_id = ecx . local_id ( vid ) ;
225
+ encode_def_id_and_key ( ecx , self . rbml_w , vid ) ;
226
+ encode_family ( self . rbml_w , match variant . kind {
227
+ ty :: VariantKind :: Struct => 'V' ,
228
+ ty :: VariantKind :: Tuple => 'v' ,
229
+ ty :: VariantKind :: Unit => 'w' ,
230
+ } ) ;
231
+ encode_name ( self . rbml_w , variant . name ) ;
232
+ self . encode_parent_item ( enum_did ) ;
233
+ self . encode_visibility ( vis ) ;
237
234
238
- this. encode_struct_fields ( variant) ;
235
+ let attrs = ecx. tcx . get_attrs ( vid) ;
236
+ encode_attributes ( self . rbml_w , & attrs) ;
237
+ self . encode_repr_attrs ( & attrs) ;
239
238
240
- let specified_disr_val = variant. disr_val ;
241
- if specified_disr_val != disr_val {
242
- this. encode_disr_val ( specified_disr_val) ;
243
- disr_val = specified_disr_val;
244
- }
245
- this. encode_bounds_and_type_for_item ( variant_node_id) ;
246
- } ) ;
239
+ let stab = ecx. tcx . lookup_stability ( vid) ;
240
+ let depr = ecx. tcx . lookup_deprecation ( vid) ;
241
+ encode_stability ( self . rbml_w , stab) ;
242
+ encode_deprecation ( self . rbml_w , depr) ;
247
243
248
- disr_val = disr_val. wrap_incr ( ) ;
249
- }
244
+ self . encode_struct_fields ( variant) ;
245
+ self . encode_disr_val ( variant. disr_val ) ;
246
+ self . encode_bounds_and_type_for_item ( variant_node_id) ;
250
247
}
251
248
}
252
249
@@ -1045,7 +1042,7 @@ impl<'a, 'tcx, 'encoder> IndexBuilder<'a, 'tcx, 'encoder> {
1045
1042
// no sub-item recording needed in these cases
1046
1043
}
1047
1044
hir:: ItemEnum ( ..) => {
1048
- self . encode_enum_variant_info ( def_id, & item. vis ) ;
1045
+ self . encode_enum_variant_infos ( def_id, & item. vis ) ;
1049
1046
}
1050
1047
hir:: ItemStruct ( ref struct_def, _) => {
1051
1048
self . encode_addl_struct_info ( def_id, struct_def. id ( ) , item) ;
0 commit comments