Skip to content

Commit a5a5432

Browse files
committed
Switch metadata::encoder to <V:Visitor> trait.
placate make tidy. Remove dead code.
1 parent 3d83010 commit a5a5432

File tree

1 file changed

+81
-49
lines changed

1 file changed

+81
-49
lines changed

src/librustc/metadata/encoder.rs

Lines changed: 81 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ use syntax::attr;
3939
use syntax::attr::AttrMetaMethods;
4040
use syntax::diagnostic::span_handler;
4141
use syntax::parse::token::special_idents;
42-
use syntax::{ast_util, oldvisit};
42+
use syntax::ast_util;
43+
use syntax::visit;
4344
use syntax::parse::token;
4445
use syntax;
4546
use writer = extra::ebml::writer;
@@ -1184,6 +1185,74 @@ fn encode_info_for_foreign_item(ecx: &EncodeContext,
11841185
ebml_w.end_tag();
11851186
}
11861187

1188+
fn my_visit_expr(_e:@expr) { }
1189+
1190+
fn my_visit_item(i:@item, items: ast_map::map, ebml_w:&writer::Encoder,
1191+
ecx_ptr:*int, index: @mut ~[entry<i64>]) {
1192+
match items.get_copy(&i.id) {
1193+
ast_map::node_item(_, pt) => {
1194+
let mut ebml_w = ebml_w.clone();
1195+
// See above
1196+
let ecx : &EncodeContext = unsafe { cast::transmute(ecx_ptr) };
1197+
encode_info_for_item(ecx, &mut ebml_w, i, index, *pt);
1198+
}
1199+
_ => fail!("bad item")
1200+
}
1201+
}
1202+
1203+
fn my_visit_foreign_item(ni:@foreign_item, items: ast_map::map, ebml_w:&writer::Encoder,
1204+
ecx_ptr:*int, index: @mut ~[entry<i64>]) {
1205+
match items.get_copy(&ni.id) {
1206+
ast_map::node_foreign_item(_, abi, _, pt) => {
1207+
debug!("writing foreign item %s::%s",
1208+
ast_map::path_to_str(
1209+
*pt,
1210+
token::get_ident_interner()),
1211+
token::ident_to_str(&ni.ident));
1212+
1213+
let mut ebml_w = ebml_w.clone();
1214+
// See above
1215+
let ecx : &EncodeContext = unsafe { cast::transmute(ecx_ptr) };
1216+
encode_info_for_foreign_item(ecx,
1217+
&mut ebml_w,
1218+
ni,
1219+
index,
1220+
pt,
1221+
abi);
1222+
}
1223+
// case for separate item and foreign-item tables
1224+
_ => fail!("bad foreign item")
1225+
}
1226+
}
1227+
1228+
struct EncodeVisitor {
1229+
ebml_w_for_visit_item: writer::Encoder,
1230+
ebml_w_for_visit_foreign_item: writer::Encoder,
1231+
ecx_ptr:*int,
1232+
items: ast_map::map,
1233+
index: @mut ~[entry<i64>],
1234+
}
1235+
1236+
impl visit::Visitor<()> for EncodeVisitor {
1237+
fn visit_expr(&mut self, ex:@expr, _:()) { my_visit_expr(ex); }
1238+
fn visit_item(&mut self, i:@item, _:()) {
1239+
visit::walk_item(self, i, ());
1240+
my_visit_item(i,
1241+
self.items,
1242+
&self.ebml_w_for_visit_item,
1243+
self.ecx_ptr,
1244+
self.index);
1245+
}
1246+
fn visit_foreign_item(&mut self, ni:@foreign_item, _:()) {
1247+
visit::walk_foreign_item(self, ni, ());
1248+
my_visit_foreign_item(ni,
1249+
self.items,
1250+
&self.ebml_w_for_visit_foreign_item,
1251+
self.ecx_ptr,
1252+
self.index);
1253+
}
1254+
}
1255+
11871256
fn encode_info_for_items(ecx: &EncodeContext,
11881257
ebml_w: &mut writer::Encoder,
11891258
crate: &Crate)
@@ -1201,54 +1270,17 @@ fn encode_info_for_items(ecx: &EncodeContext,
12011270
let items = ecx.tcx.items;
12021271

12031272
// See comment in `encode_side_tables_for_ii` in astencode
1204-
let ecx_ptr : *() = unsafe { cast::transmute(ecx) };
1205-
1206-
oldvisit::visit_crate(crate, ((), oldvisit::mk_vt(@oldvisit::Visitor {
1207-
visit_expr: |_e, (_cx, _v)| { },
1208-
visit_item: {
1209-
let ebml_w = (*ebml_w).clone();
1210-
|i, (cx, v)| {
1211-
oldvisit::visit_item(i, (cx, v));
1212-
match items.get_copy(&i.id) {
1213-
ast_map::node_item(_, pt) => {
1214-
let mut ebml_w = ebml_w.clone();
1215-
// See above
1216-
let ecx : &EncodeContext = unsafe { cast::transmute(ecx_ptr) };
1217-
encode_info_for_item(ecx, &mut ebml_w, i, index, *pt);
1218-
}
1219-
_ => fail!("bad item")
1220-
}
1221-
}
1222-
},
1223-
visit_foreign_item: {
1224-
let ebml_w = (*ebml_w).clone();
1225-
|ni, (cx, v)| {
1226-
oldvisit::visit_foreign_item(ni, (cx, v));
1227-
match items.get_copy(&ni.id) {
1228-
ast_map::node_foreign_item(_, abi, _, pt) => {
1229-
debug!("writing foreign item %s::%s",
1230-
ast_map::path_to_str(
1231-
*pt,
1232-
token::get_ident_interner()),
1233-
token::ident_to_str(&ni.ident));
1234-
1235-
let mut ebml_w = ebml_w.clone();
1236-
// See above
1237-
let ecx : &EncodeContext = unsafe { cast::transmute(ecx_ptr) };
1238-
encode_info_for_foreign_item(ecx,
1239-
&mut ebml_w,
1240-
ni,
1241-
index,
1242-
pt,
1243-
abi);
1244-
}
1245-
// case for separate item and foreign-item tables
1246-
_ => fail!("bad foreign item")
1247-
}
1248-
}
1249-
},
1250-
..*oldvisit::default_visitor()
1251-
})));
1273+
let ecx_ptr : *int = unsafe { cast::transmute(ecx) };
1274+
let mut visitor = EncodeVisitor {
1275+
index: index,
1276+
items: items,
1277+
ecx_ptr: ecx_ptr,
1278+
ebml_w_for_visit_item: (*ebml_w).clone(),
1279+
ebml_w_for_visit_foreign_item: (*ebml_w).clone(),
1280+
};
1281+
1282+
visit::walk_crate(&mut visitor, crate, ());
1283+
12521284
ebml_w.end_tag();
12531285
return /*bad*/(*index).clone();
12541286
}

0 commit comments

Comments
 (0)