about summary refs log tree commit diff
diff options
context:
space:
mode:
authorFelix S. Klock II <pnkfelix@pnkfx.org>2013-08-13 15:30:08 +0200
committerFelix S. Klock II <pnkfelix@pnkfx.org>2013-08-15 04:10:21 +0200
commit863aac04cd2d70155e82fecfe764b258dab11490 (patch)
tree234ecab9e0a46ed67fe0d837b0988c5bc6152355
parent5c802a68d195f39f9452a03b0e491c7a338fdcca (diff)
downloadrust-863aac04cd2d70155e82fecfe764b258dab11490.tar.gz
rust-863aac04cd2d70155e82fecfe764b258dab11490.zip
ported lang_items from oldvisit to <V:Visitor> trait.
-rw-r--r--src/librustc/middle/lang_items.rs41
1 files changed, 26 insertions, 15 deletions
diff --git a/src/librustc/middle/lang_items.rs b/src/librustc/middle/lang_items.rs
index 42bc435a58a..18af303f239 100644
--- a/src/librustc/middle/lang_items.rs
+++ b/src/librustc/middle/lang_items.rs
@@ -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) {