Switch metadata::encoder to <V:Visitor> trait.
placate make tidy. Remove dead code.
This commit is contained in:
parent
3d83010648
commit
a5a5432f98
1 changed files with 79 additions and 47 deletions
|
@ -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();
|
||||||
|
@ -1218,12 +1198,10 @@ 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",
|
||||||
|
@ -1245,10 +1223,64 @@ fn encode_info_for_items(ecx: &EncodeContext,
|
||||||
// case for separate item and foreign-item tables
|
// case for separate item and foreign-item tables
|
||||||
_ => fail!("bad foreign item")
|
_ => fail!("bad foreign item")
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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, _:()) {
|
||||||
..*oldvisit::default_visitor()
|
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();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue