1
Fork 0

Switch metadata::encoder to <V:Visitor> trait.

placate make tidy.  Remove dead code.
This commit is contained in:
Felix S. Klock II 2013-08-12 14:05:43 +02:00
parent 3d83010648
commit a5a5432f98

View file

@ -39,7 +39,8 @@ use syntax::attr;
use syntax::attr::AttrMetaMethods; use syntax::attr::AttrMetaMethods;
use syntax::diagnostic::span_handler; use syntax::diagnostic::span_handler;
use syntax::parse::token::special_idents; use syntax::parse::token::special_idents;
use syntax::{ast_util, oldvisit}; use syntax::ast_util;
use syntax::visit;
use syntax::parse::token; use syntax::parse::token;
use syntax; use syntax;
use writer = extra::ebml::writer; use writer = extra::ebml::writer;
@ -1184,31 +1185,10 @@ fn encode_info_for_foreign_item(ecx: &EncodeContext,
ebml_w.end_tag(); ebml_w.end_tag();
} }
fn encode_info_for_items(ecx: &EncodeContext, fn my_visit_expr(_e:@expr) { }
ebml_w: &mut writer::Encoder,
crate: &Crate)
-> ~[entry<i64>] {
let index = @mut ~[];
ebml_w.start_tag(tag_items_data);
index.push(entry { val: CRATE_NODE_ID as i64, pos: ebml_w.writer.tell() });
encode_info_for_mod(ecx,
ebml_w,
&crate.module,
CRATE_NODE_ID,
[],
syntax::parse::token::special_idents::invalid,
public);
let items = ecx.tcx.items;
// See comment in `encode_side_tables_for_ii` in astencode fn my_visit_item(i:@item, items: ast_map::map, ebml_w:&writer::Encoder,
let ecx_ptr : *() = unsafe { cast::transmute(ecx) }; ecx_ptr:*int, index: @mut ~[entry<i64>]) {
oldvisit::visit_crate(crate, ((), oldvisit::mk_vt(@oldvisit::Visitor {
visit_expr: |_e, (_cx, _v)| { },
visit_item: {
let ebml_w = (*ebml_w).clone();
|i, (cx, v)| {
oldvisit::visit_item(i, (cx, v));
match items.get_copy(&i.id) { match items.get_copy(&i.id) {
ast_map::node_item(_, pt) => { ast_map::node_item(_, pt) => {
let mut ebml_w = ebml_w.clone(); let mut ebml_w = ebml_w.clone();
@ -1219,11 +1199,9 @@ fn encode_info_for_items(ecx: &EncodeContext,
_ => fail!("bad item") _ => fail!("bad item")
} }
} }
},
visit_foreign_item: { fn my_visit_foreign_item(ni:@foreign_item, items: ast_map::map, ebml_w:&writer::Encoder,
let ebml_w = (*ebml_w).clone(); ecx_ptr:*int, index: @mut ~[entry<i64>]) {
|ni, (cx, v)| {
oldvisit::visit_foreign_item(ni, (cx, v));
match items.get_copy(&ni.id) { match items.get_copy(&ni.id) {
ast_map::node_foreign_item(_, abi, _, pt) => { ast_map::node_foreign_item(_, abi, _, pt) => {
debug!("writing foreign item %s::%s", debug!("writing foreign item %s::%s",
@ -1246,9 +1224,63 @@ fn encode_info_for_items(ecx: &EncodeContext,
_ => fail!("bad foreign item") _ => fail!("bad foreign item")
} }
} }
},
..*oldvisit::default_visitor() struct EncodeVisitor {
}))); ebml_w_for_visit_item: writer::Encoder,
ebml_w_for_visit_foreign_item: writer::Encoder,
ecx_ptr:*int,
items: ast_map::map,
index: @mut ~[entry<i64>],
}
impl visit::Visitor<()> for EncodeVisitor {
fn visit_expr(&mut self, ex:@expr, _:()) { my_visit_expr(ex); }
fn visit_item(&mut self, i:@item, _:()) {
visit::walk_item(self, i, ());
my_visit_item(i,
self.items,
&self.ebml_w_for_visit_item,
self.ecx_ptr,
self.index);
}
fn visit_foreign_item(&mut self, ni:@foreign_item, _:()) {
visit::walk_foreign_item(self, ni, ());
my_visit_foreign_item(ni,
self.items,
&self.ebml_w_for_visit_foreign_item,
self.ecx_ptr,
self.index);
}
}
fn encode_info_for_items(ecx: &EncodeContext,
ebml_w: &mut writer::Encoder,
crate: &Crate)
-> ~[entry<i64>] {
let index = @mut ~[];
ebml_w.start_tag(tag_items_data);
index.push(entry { val: CRATE_NODE_ID as i64, pos: ebml_w.writer.tell() });
encode_info_for_mod(ecx,
ebml_w,
&crate.module,
CRATE_NODE_ID,
[],
syntax::parse::token::special_idents::invalid,
public);
let items = ecx.tcx.items;
// See comment in `encode_side_tables_for_ii` in astencode
let ecx_ptr : *int = unsafe { cast::transmute(ecx) };
let mut visitor = EncodeVisitor {
index: index,
items: items,
ecx_ptr: ecx_ptr,
ebml_w_for_visit_item: (*ebml_w).clone(),
ebml_w_for_visit_foreign_item: (*ebml_w).clone(),
};
visit::walk_crate(&mut visitor, crate, ());
ebml_w.end_tag(); ebml_w.end_tag();
return /*bad*/(*index).clone(); return /*bad*/(*index).clone();
} }