@@ -53,7 +53,7 @@ use rustc::hir::intravisit::Visitor;
53
53
use rustc:: hir:: intravisit;
54
54
use rustc:: hir:: map:: DefKey ;
55
55
56
- use super :: index_builder:: { IndexBuilder , ItemContentBuilder , XRef } ;
56
+ use super :: index_builder:: { FromId , IndexBuilder , ItemContentBuilder , XRef } ;
57
57
58
58
pub struct EncodeContext < ' a , ' tcx : ' a > {
59
59
pub diag : & ' a Handler ,
@@ -198,24 +198,23 @@ impl<'a, 'tcx, 'encoder> ItemContentBuilder<'a, 'tcx, 'encoder> {
198
198
199
199
impl < ' a , ' tcx , ' encoder > IndexBuilder < ' a , ' tcx , ' encoder > {
200
200
fn encode_enum_variant_infos ( & mut self ,
201
- enum_did : DefId ,
202
- vis : & hir:: Visibility ) {
201
+ enum_did : DefId ) {
203
202
debug ! ( "encode_enum_variant_info(enum_did={:?})" , enum_did) ;
204
203
let ecx = self . ecx ( ) ;
205
204
let def = ecx. tcx . lookup_adt_def ( enum_did) ;
206
205
self . encode_fields ( enum_did) ;
207
206
for ( i, variant) in def. variants . iter ( ) . enumerate ( ) {
208
207
self . record ( variant. did ,
209
208
ItemContentBuilder :: encode_enum_variant_info,
210
- ( enum_did, i, vis ) ) ;
209
+ ( enum_did, i) ) ;
211
210
}
212
211
}
213
212
}
214
213
215
214
impl < ' a , ' tcx , ' encoder > ItemContentBuilder < ' a , ' tcx , ' encoder > {
216
215
fn encode_enum_variant_info ( & mut self ,
217
- ( enum_did, index, vis ) :
218
- ( DefId , usize , & hir :: Visibility ) ) {
216
+ ( enum_did, index) :
217
+ ( DefId , usize ) ) {
219
218
let ecx = self . ecx ;
220
219
let def = ecx. tcx . lookup_adt_def ( enum_did) ;
221
220
let variant = & def. variants [ index] ;
@@ -229,7 +228,10 @@ impl<'a, 'tcx, 'encoder> ItemContentBuilder<'a, 'tcx, 'encoder> {
229
228
} ) ;
230
229
encode_name ( self . rbml_w , variant. name ) ;
231
230
self . encode_parent_item ( enum_did) ;
232
- self . encode_visibility ( vis) ;
231
+
232
+ let enum_id = ecx. tcx . map . as_local_node_id ( enum_did) . unwrap ( ) ;
233
+ let enum_vis = & ecx. tcx . map . expect_item ( enum_id) . vis ;
234
+ self . encode_visibility ( enum_vis) ;
233
235
234
236
let attrs = ecx. tcx . get_attrs ( vid) ;
235
237
encode_attributes ( self . rbml_w , & attrs) ;
@@ -294,8 +296,8 @@ fn encode_reexports(ecx: &EncodeContext,
294
296
295
297
impl < ' a , ' tcx , ' encoder > ItemContentBuilder < ' a , ' tcx , ' encoder > {
296
298
fn encode_info_for_mod ( & mut self ,
297
- ( md, attrs, id , name, vis) :
298
- ( & hir:: Mod , & [ ast:: Attribute ] , NodeId , Name , & hir:: Visibility ) ) {
299
+ FromId ( id , ( md, attrs, name, vis) ) :
300
+ FromId < ( & hir:: Mod , & [ ast:: Attribute ] , Name , & hir:: Visibility ) > ) {
299
301
let ecx = self . ecx ( ) ;
300
302
301
303
encode_def_id_and_key ( ecx, self . rbml_w , ecx. tcx . map . local_def_id ( id) ) ;
@@ -936,7 +938,7 @@ impl<'a, 'tcx, 'encoder> ItemContentBuilder<'a, 'tcx, 'encoder> {
936
938
self . encode_method_argument_names ( & decl) ;
937
939
}
938
940
hir:: ItemMod ( ref m) => {
939
- self . encode_info_for_mod ( ( m, & item. attrs , item. id , item . name , & item. vis ) ) ;
941
+ self . encode_info_for_mod ( FromId ( item . id , ( m, & item. attrs , item. name , & item. vis ) ) ) ;
940
942
}
941
943
hir:: ItemForeignMod ( ref fm) => {
942
944
encode_def_id_and_key ( ecx, self . rbml_w , def_id) ;
@@ -1166,7 +1168,7 @@ impl<'a, 'tcx, 'encoder> IndexBuilder<'a, 'tcx, 'encoder> {
1166
1168
// no sub-item recording needed in these cases
1167
1169
}
1168
1170
hir:: ItemEnum ( ..) => {
1169
- self . encode_enum_variant_infos ( def_id, & item . vis ) ;
1171
+ self . encode_enum_variant_infos ( def_id) ;
1170
1172
}
1171
1173
hir:: ItemStruct ( ref struct_def, _) => {
1172
1174
self . encode_addl_struct_info ( def_id, struct_def. id ( ) , item) ;
@@ -1395,11 +1397,10 @@ fn encode_info_for_items<'a, 'tcx>(ecx: &EncodeContext<'a, 'tcx>,
1395
1397
let mut index = IndexBuilder :: new ( ecx, rbml_w) ;
1396
1398
index. record ( DefId :: local ( CRATE_DEF_INDEX ) ,
1397
1399
ItemContentBuilder :: encode_info_for_mod,
1398
- ( & krate. module ,
1399
- & [ ] ,
1400
- CRATE_NODE_ID ,
1401
- syntax:: parse:: token:: intern ( & ecx. link_meta . crate_name ) ,
1402
- & hir:: Public ) ) ;
1400
+ FromId ( CRATE_NODE_ID , ( & krate. module ,
1401
+ & [ ] ,
1402
+ syntax:: parse:: token:: intern ( & ecx. link_meta . crate_name ) ,
1403
+ & hir:: Public ) ) ) ;
1403
1404
krate. visit_all_items ( & mut EncodeVisitor {
1404
1405
index : & mut index,
1405
1406
} ) ;
0 commit comments