@@ -762,10 +762,10 @@ fn encode_xrefs<'a, 'tcx>(ecx: &EncodeContext<'a, 'tcx>,
762
762
rbml_w. end_tag ( ) ;
763
763
}
764
764
765
- fn encode_info_for_item < ' a , ' tcx > ( ecx : & EncodeContext < ' a , ' tcx > ,
766
- rbml_w : & mut Encoder ,
765
+ fn encode_info_for_item < ' a , ' tcx > ( rbml_w : & mut Encoder ,
767
766
item : & hir:: Item ,
768
767
index : & mut IndexBuilder < ' a , ' tcx > ) {
768
+ let ecx = index. ecx ( ) ;
769
769
let tcx = ecx. tcx ;
770
770
771
771
debug ! ( "encoding info for item at {}" ,
@@ -1234,10 +1234,11 @@ fn encode_info_for_item<'a, 'tcx>(ecx: &EncodeContext<'a, 'tcx>,
1234
1234
}
1235
1235
}
1236
1236
1237
- fn encode_info_for_foreign_item < ' a , ' tcx > ( ecx : & EncodeContext < ' a , ' tcx > ,
1238
- rbml_w : & mut Encoder ,
1237
+ fn encode_info_for_foreign_item < ' a , ' tcx > ( rbml_w : & mut Encoder ,
1239
1238
nitem : & hir:: ForeignItem ,
1240
1239
index : & mut IndexBuilder < ' a , ' tcx > ) {
1240
+ let ecx = index. ecx ( ) ;
1241
+
1241
1242
debug ! ( "writing foreign item {}" , ecx. tcx. node_path_str( nitem. id) ) ;
1242
1243
let def_id = ecx. tcx . map . local_def_id ( nitem. id ) ;
1243
1244
let abi = ecx. tcx . map . get_foreign_abi ( nitem. id ) ;
@@ -1282,10 +1283,50 @@ fn encode_info_for_foreign_item<'a, 'tcx>(ecx: &EncodeContext<'a, 'tcx>,
1282
1283
rbml_w. end_tag ( ) ;
1283
1284
}
1284
1285
1285
- fn my_visit_expr ( expr : & hir:: Expr ,
1286
- rbml_w : & mut Encoder ,
1287
- ecx : & EncodeContext ,
1288
- index : & mut IndexBuilder ) {
1286
+ struct EncodeVisitor < ' a , ' data : ' a , ' ecx : ' a , ' tcx : ' ecx > {
1287
+ rbml_w_for_visit_item : & ' a mut Encoder < ' data > ,
1288
+ index : & ' a mut IndexBuilder < ' ecx , ' tcx > ,
1289
+ }
1290
+
1291
+ impl < ' a , ' data , ' ecx , ' tcx > Visitor < ' tcx > for EncodeVisitor < ' a , ' data , ' ecx , ' tcx > {
1292
+ fn visit_expr ( & mut self , ex : & ' tcx hir:: Expr ) {
1293
+ intravisit:: walk_expr ( self , ex) ;
1294
+ encode_info_for_expr ( ex, self . rbml_w_for_visit_item , self . index ) ;
1295
+ }
1296
+ fn visit_item ( & mut self , i : & ' tcx hir:: Item ) {
1297
+ intravisit:: walk_item ( self , i) ;
1298
+ encode_info_for_item ( self . rbml_w_for_visit_item , i, self . index ) ;
1299
+ }
1300
+ fn visit_foreign_item ( & mut self , ni : & ' tcx hir:: ForeignItem ) {
1301
+ intravisit:: walk_foreign_item ( self , ni) ;
1302
+ encode_info_for_foreign_item ( self . rbml_w_for_visit_item , ni, self . index ) ;
1303
+ }
1304
+ fn visit_ty ( & mut self , ty : & ' tcx hir:: Ty ) {
1305
+ intravisit:: walk_ty ( self , ty) ;
1306
+ encode_info_for_ty ( ty, self . rbml_w_for_visit_item , self . index ) ;
1307
+ }
1308
+ }
1309
+
1310
+ fn encode_info_for_ty ( ty : & hir:: Ty ,
1311
+ rbml_w : & mut Encoder ,
1312
+ index : & mut IndexBuilder ) {
1313
+ let ecx = index. ecx ( ) ;
1314
+ if let hir:: TyImplTrait ( _) = ty. node {
1315
+ let def_id = ecx. tcx . map . local_def_id ( ty. id ) ;
1316
+ let _task = index. record ( def_id, rbml_w) ;
1317
+ rbml_w. start_tag ( tag_items_data_item) ;
1318
+ encode_def_id_and_key ( ecx, rbml_w, def_id) ;
1319
+ encode_family ( rbml_w, 'y' ) ;
1320
+ encode_bounds_and_type_for_item ( rbml_w, ecx, index, ty. id ) ;
1321
+ rbml_w. end_tag ( ) ;
1322
+ }
1323
+ }
1324
+
1325
+ fn encode_info_for_expr ( expr : & hir:: Expr ,
1326
+ rbml_w : & mut Encoder ,
1327
+ index : & mut IndexBuilder ) {
1328
+ let ecx = index. ecx ( ) ;
1329
+
1289
1330
match expr. node {
1290
1331
hir:: ExprClosure ( ..) => {
1291
1332
let def_id = ecx. tcx . map . local_def_id ( expr. id ) ;
@@ -1313,42 +1354,7 @@ fn my_visit_expr(expr: &hir::Expr,
1313
1354
}
1314
1355
}
1315
1356
1316
- struct EncodeVisitor < ' a , ' b : ' a , ' c : ' a , ' tcx : ' c > {
1317
- rbml_w_for_visit_item : & ' a mut Encoder < ' b > ,
1318
- ecx : & ' a EncodeContext < ' c , ' tcx > ,
1319
- index : & ' a mut IndexBuilder < ' c , ' tcx > ,
1320
- }
1321
-
1322
- impl < ' a , ' b , ' c , ' tcx > Visitor < ' tcx > for EncodeVisitor < ' a , ' b , ' c , ' tcx > {
1323
- fn visit_expr ( & mut self , ex : & ' tcx hir:: Expr ) {
1324
- intravisit:: walk_expr ( self , ex) ;
1325
- my_visit_expr ( ex, self . rbml_w_for_visit_item , self . ecx , self . index ) ;
1326
- }
1327
- fn visit_item ( & mut self , i : & ' tcx hir:: Item ) {
1328
- intravisit:: walk_item ( self , i) ;
1329
- encode_info_for_item ( self . ecx , self . rbml_w_for_visit_item , i, self . index ) ;
1330
- }
1331
- fn visit_foreign_item ( & mut self , ni : & ' tcx hir:: ForeignItem ) {
1332
- intravisit:: walk_foreign_item ( self , ni) ;
1333
- encode_info_for_foreign_item ( self . ecx , self . rbml_w_for_visit_item , ni, self . index ) ;
1334
- }
1335
- fn visit_ty ( & mut self , ty : & ' tcx hir:: Ty ) {
1336
- intravisit:: walk_ty ( self , ty) ;
1337
-
1338
- if let hir:: TyImplTrait ( _) = ty. node {
1339
- let rbml_w = & mut * self . rbml_w_for_visit_item ;
1340
- let def_id = self . ecx . tcx . map . local_def_id ( ty. id ) ;
1341
- let _task = self . index . record ( def_id, rbml_w) ;
1342
- rbml_w. start_tag ( tag_items_data_item) ;
1343
- encode_def_id_and_key ( self . ecx , rbml_w, def_id) ;
1344
- encode_family ( rbml_w, 'y' ) ;
1345
- encode_bounds_and_type_for_item ( rbml_w, self . ecx , self . index , ty. id ) ;
1346
- rbml_w. end_tag ( ) ;
1347
- }
1348
- }
1349
- }
1350
-
1351
- fn encode_info_for_items < ' a , ' tcx > ( ecx : & EncodeContext < ' a , ' tcx > ,
1357
+ fn encode_info_for_items < ' a , ' tcx > ( ecx : & ' a EncodeContext < ' a , ' tcx > ,
1352
1358
rbml_w : & mut Encoder )
1353
1359
-> IndexBuilder < ' a , ' tcx > {
1354
1360
let krate = ecx. tcx . map . krate ( ) ;
@@ -1369,7 +1375,6 @@ fn encode_info_for_items<'a, 'tcx>(ecx: &EncodeContext<'a, 'tcx>,
1369
1375
1370
1376
krate. visit_all_items ( & mut EncodeVisitor {
1371
1377
index : & mut index,
1372
- ecx : ecx,
1373
1378
rbml_w_for_visit_item : & mut * rbml_w,
1374
1379
} ) ;
1375
1380
0 commit comments