ported lang_items from oldvisit to <V:Visitor> trait.

This commit is contained in:
Felix S. Klock II 2013-08-13 15:30:08 +02:00
parent 5c802a68d1
commit 863aac04cd

View file

@ -26,8 +26,9 @@ use metadata::cstore::iter_crate_data;
use syntax::ast::{Crate, def_id, MetaItem};
use syntax::ast_util::local_def;
use syntax::attr::AttrMetaMethods;
use syntax::oldvisit::{default_simple_visitor, mk_simple_visitor};
use syntax::oldvisit::{SimpleVisitor, visit_crate};
use syntax::ast::{item};
use syntax::visit;
use syntax::visit::Visitor;
use std::hashmap::HashMap;
@ -297,6 +298,27 @@ struct LanguageItemCollector<'self> {
item_refs: HashMap<@str, uint>,
}
struct LanguageItemVisitor<'self> {
this: *mut LanguageItemCollector<'self>,
}
impl<'self> Visitor<()> for LanguageItemVisitor<'self> {
fn visit_item(&mut self, item:@item, _:()) {
for attribute in item.attrs.iter() {
unsafe {
(*self.this).match_and_collect_meta_item(
local_def(item.id),
attribute.node.value
);
}
}
visit::walk_item(self, item, ());
}
}
impl<'self> LanguageItemCollector<'self> {
pub fn new<'a>(crate: &'a Crate, session: Session)
-> LanguageItemCollector<'a> {
@ -410,19 +432,8 @@ impl<'self> LanguageItemCollector<'self> {
pub fn collect_local_language_items(&mut self) {
let this: *mut LanguageItemCollector = &mut *self;
visit_crate(self.crate, ((), mk_simple_visitor(@SimpleVisitor {
visit_item: |item| {
for attribute in item.attrs.iter() {
unsafe {
(*this).match_and_collect_meta_item(
local_def(item.id),
attribute.node.value
);
}
}
},
.. *default_simple_visitor()
})));
let mut v = LanguageItemVisitor { this: this };
visit::walk_crate(&mut v, self.crate, ());
}
pub fn collect_external_language_items(&mut self) {