about summary refs log tree commit diff
path: root/src/comp
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-01-16 21:12:08 -0800
committerBrian Anderson <banderson@mozilla.com>2012-01-16 21:12:36 -0800
commitbd63c3928ee5e292aebb94ec60ef72f02dc84795 (patch)
tree5d53314d99ef0eb58bba288935376dad51b49b79 /src/comp
parent4f2ad6b1241741db2af192b87b9af1b1d1679af1 (diff)
downloadrust-bd63c3928ee5e292aebb94ec60ef72f02dc84795.tar.gz
rust-bd63c3928ee5e292aebb94ec60ef72f02dc84795.zip
rustc: Move some attribute accessors from rustdoc to rustc
Diffstat (limited to 'src/comp')
-rw-r--r--src/comp/front/attr.rs50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/comp/front/attr.rs b/src/comp/front/attr.rs
index f874bd241e0..642f6eb439e 100644
--- a/src/comp/front/attr.rs
+++ b/src/comp/front/attr.rs
@@ -20,6 +20,9 @@ export get_meta_item_name;
 export get_meta_item_value_str;
 export get_meta_item_value_str_by_name;
 export get_meta_item_list;
+export meta_item_value_from_list;
+export meta_item_list_from_list;
+export name_value_str_pair;
 export mk_name_value_item_str;
 export mk_name_value_item;
 export mk_list_item;
@@ -217,6 +220,53 @@ fn native_abi(attrs: [ast::attribute]) -> either::t<str, ast::native_abi> {
     };
 }
 
+fn meta_item_from_list(
+    items: [@ast::meta_item],
+    name: str
+) -> option<@ast::meta_item> {
+    let items = attr::find_meta_items_by_name(items, name);
+    vec::last(items)
+}
+
+fn meta_item_value_from_list(
+    items: [@ast::meta_item],
+    name: str
+) -> option<str> {
+    alt meta_item_from_list(items, name) {
+      some(item) {
+        alt attr::get_meta_item_value_str(item) {
+          some(value) { some(value) }
+          none. { none }
+        }
+      }
+      none. { none }
+    }
+}
+
+fn meta_item_list_from_list(
+    items: [@ast::meta_item],
+    name: str
+) -> option<[@ast::meta_item]> {
+    alt meta_item_from_list(items, name) {
+      some(item) {
+        attr::get_meta_item_list(item)
+      }
+      none. { none }
+    }
+}
+
+fn name_value_str_pair(
+    item: @ast::meta_item
+) -> option<(str, str)> {
+    alt attr::get_meta_item_value_str(item) {
+      some(value) {
+        let name = attr::get_meta_item_name(item);
+        some((name, value))
+      }
+      none. { none }
+    }
+}
+
 fn span<T: copy>(item: T) -> ast::spanned<T> {
     ret {node: item, span: ast_util::dummy_sp()};
 }