Skip to content

Commit 92f269e

Browse files
committed
put ecx into IndexBuilder so we don't have to pass
1 parent 25bb51d commit 92f269e

File tree

2 files changed

+54
-49
lines changed

2 files changed

+54
-49
lines changed

src/librustc_metadata/encoder.rs

Lines changed: 50 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -762,10 +762,10 @@ fn encode_xrefs<'a, 'tcx>(ecx: &EncodeContext<'a, 'tcx>,
762762
rbml_w.end_tag();
763763
}
764764

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,
767766
item: &hir::Item,
768767
index: &mut IndexBuilder<'a, 'tcx>) {
768+
let ecx = index.ecx();
769769
let tcx = ecx.tcx;
770770

771771
debug!("encoding info for item at {}",
@@ -1234,10 +1234,11 @@ fn encode_info_for_item<'a, 'tcx>(ecx: &EncodeContext<'a, 'tcx>,
12341234
}
12351235
}
12361236

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,
12391238
nitem: &hir::ForeignItem,
12401239
index: &mut IndexBuilder<'a, 'tcx>) {
1240+
let ecx = index.ecx();
1241+
12411242
debug!("writing foreign item {}", ecx.tcx.node_path_str(nitem.id));
12421243
let def_id = ecx.tcx.map.local_def_id(nitem.id);
12431244
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>,
12821283
rbml_w.end_tag();
12831284
}
12841285

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+
12891330
match expr.node {
12901331
hir::ExprClosure(..) => {
12911332
let def_id = ecx.tcx.map.local_def_id(expr.id);
@@ -1313,42 +1354,7 @@ fn my_visit_expr(expr: &hir::Expr,
13131354
}
13141355
}
13151356

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>,
13521358
rbml_w: &mut Encoder)
13531359
-> IndexBuilder<'a, 'tcx> {
13541360
let krate = ecx.tcx.map.krate();
@@ -1369,7 +1375,6 @@ fn encode_info_for_items<'a, 'tcx>(ecx: &EncodeContext<'a, 'tcx>,
13691375

13701376
krate.visit_all_items(&mut EncodeVisitor {
13711377
index: &mut index,
1372-
ecx: ecx,
13731378
rbml_w_for_visit_item: &mut *rbml_w,
13741379
});
13751380

src/librustc_metadata/index_builder.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@
1111
use encoder::EncodeContext;
1212
use index::IndexData;
1313
use rbml::writer::Encoder;
14-
use rustc::dep_graph::{DepGraph, DepNode, DepTask};
14+
use rustc::dep_graph::{DepNode, DepTask};
1515
use rustc::hir::def_id::DefId;
1616
use rustc::ty;
1717
use rustc_data_structures::fnv::FnvHashMap;
1818

19-
pub struct IndexBuilder<'a, 'tcx> {
19+
pub struct IndexBuilder<'a, 'tcx: 'a> {
2020
ecx: &'a EncodeContext<'a, 'tcx>,
2121
items: IndexData,
2222
xrefs: FnvHashMap<XRef<'tcx>, u32>, // sequentially-assigned
@@ -27,15 +27,15 @@ pub struct IndexBuilder<'a, 'tcx> {
2727
pub enum XRef<'tcx> { Predicate(ty::Predicate<'tcx>) }
2828

2929
impl<'a, 'tcx> IndexBuilder<'a, 'tcx> {
30-
pub fn new(ecx: &EncodeContext<'a, 'tcx>) -> Self {
30+
pub fn new(ecx: &'a EncodeContext<'a, 'tcx>) -> Self {
3131
IndexBuilder {
3232
ecx: ecx,
3333
items: IndexData::new(ecx.tcx.map.num_local_def_ids()),
3434
xrefs: FnvHashMap()
3535
}
3636
}
3737

38-
pub fn ecx(&self) {
38+
pub fn ecx(&self) -> &'a EncodeContext<'a, 'tcx> {
3939
self.ecx
4040
}
4141

0 commit comments

Comments
 (0)