about summary refs log tree commit diff
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-09-20 17:37:10 -0700
committerBrian Anderson <banderson@mozilla.com>2012-09-20 17:37:21 -0700
commit90e3665fa79d32c3188169cfa992516fb36b81a8 (patch)
tree744d1e3eff6316baf1be0018f74191023fb18dab
parent19ad88c2b81d733d50474896d2e0c870a9dc3015 (diff)
downloadrust-90e3665fa79d32c3188169cfa992516fb36b81a8.tar.gz
rust-90e3665fa79d32c3188169cfa992516fb36b81a8.zip
syntax: Make attributes sendable for rustdoc's benefit
-rw-r--r--src/cargo/cargo.rs6
-rw-r--r--src/libsyntax/ast.rs6
-rw-r--r--src/libsyntax/attr.rs84
-rw-r--r--src/libsyntax/ext/pipes/ast_builder.rs4
-rw-r--r--src/libsyntax/fold.rs6
-rw-r--r--src/libsyntax/parse/attr.rs20
-rw-r--r--src/libsyntax/print/pprust.rs8
-rw-r--r--src/rustc/back/link.rs12
-rw-r--r--src/rustc/front/config.rs6
-rw-r--r--src/rustc/front/test.rs2
-rw-r--r--src/rustc/metadata/creader.rs16
-rw-r--r--src/rustc/metadata/csearch.rs2
-rw-r--r--src/rustc/metadata/decoder.rs8
-rw-r--r--src/rustc/metadata/encoder.rs4
-rw-r--r--src/rustc/metadata/loader.rs14
-rw-r--r--src/rustc/middle/lang_items.rs2
-rw-r--r--src/rustc/middle/trans/base.rs4
-rw-r--r--src/rustdoc/attr_parser.rs8
18 files changed, 106 insertions, 106 deletions
diff --git a/src/cargo/cargo.rs b/src/cargo/cargo.rs
index e648e6120ce..d5a5528f8c9 100644
--- a/src/cargo/cargo.rs
+++ b/src/cargo/cargo.rs
@@ -279,7 +279,7 @@ fn assume_source_method(url: ~str) -> ~str {
     ~"curl"
 }
 
-fn load_link(mis: ~[@ast::meta_item]) -> (Option<~str>,
+fn load_link(mis: ~[ast::meta_item]) -> (Option<~str>,
                                          Option<~str>,
                                          Option<~str>) {
     let mut name = None;
@@ -358,9 +358,9 @@ fn load_crate(filename: &Path) -> Option<crate> {
                 let mut attr_from = ~"";
 
               for m.each |item| {
-                    match attr::get_meta_item_value_str(*item) {
+                    match attr::get_meta_item_value_str(item) {
                         Some(value) => {
-                            let name = attr::get_meta_item_name(*item);
+                            let name = attr::get_meta_item_name(item);
 
                             match name {
                                 ~"vers" => attr_vers = value,
diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs
index 3f41c03b927..90d9dd28c9b 100644
--- a/src/libsyntax/ast.rs
+++ b/src/libsyntax/ast.rs
@@ -388,7 +388,7 @@ impl def : cmp::Eq {
 
 // The set of meta_items that define the compilation environment of the crate,
 // used to drive conditional compilation
-type crate_cfg = ~[@meta_item];
+type crate_cfg = ~[meta_item];
 
 type crate = spanned<crate_>;
 
@@ -420,7 +420,7 @@ type meta_item = spanned<meta_item_>;
 #[auto_serialize]
 enum meta_item_ {
     meta_word(~str),
-    meta_list(~str, ~[@meta_item]),
+    meta_list(~str, ~[meta_item]),
     meta_name_value(~str, lit),
 }
 
@@ -1859,7 +1859,7 @@ type view_item = {node: view_item_, attrs: ~[attribute],
 
 #[auto_serialize]
 enum view_item_ {
-    view_item_use(ident, ~[@meta_item], node_id),
+    view_item_use(ident, ~[meta_item], node_id),
     view_item_import(~[@view_path]),
     view_item_export(~[@view_path])
 }
diff --git a/src/libsyntax/attr.rs b/src/libsyntax/attr.rs
index 1a8096484c2..f8792ab6c20 100644
--- a/src/libsyntax/attr.rs
+++ b/src/libsyntax/attr.rs
@@ -50,27 +50,27 @@ export require_unique_names;
 /* Constructors */
 
 fn mk_name_value_item_str(name: ~str, +value: ~str) ->
-    @ast::meta_item {
+    ast::meta_item {
     let value_lit = dummy_spanned(ast::lit_str(@value));
     return mk_name_value_item(name, value_lit);
 }
 
 fn mk_name_value_item(name: ~str, +value: ast::lit)
-        -> @ast::meta_item {
-    return @dummy_spanned(ast::meta_name_value(name, value));
+        -> ast::meta_item {
+    return dummy_spanned(ast::meta_name_value(name, value));
 }
 
-fn mk_list_item(name: ~str, +items: ~[@ast::meta_item]) ->
-   @ast::meta_item {
-    return @dummy_spanned(ast::meta_list(name, items));
+fn mk_list_item(name: ~str, +items: ~[ast::meta_item]) ->
+   ast::meta_item {
+    return dummy_spanned(ast::meta_list(name, items));
 }
 
-fn mk_word_item(name: ~str) -> @ast::meta_item {
-    return @dummy_spanned(ast::meta_word(name));
+fn mk_word_item(name: ~str) -> ast::meta_item {
+    return dummy_spanned(ast::meta_word(name));
 }
 
-fn mk_attr(item: @ast::meta_item) -> ast::attribute {
-    return dummy_spanned({style: ast::attr_inner, value: *item,
+fn mk_attr(+item: ast::meta_item) -> ast::attribute {
+    return dummy_spanned({style: ast::attr_inner, value: item,
                        is_sugared_doc: false});
 }
 
@@ -86,10 +86,10 @@ fn mk_sugared_doc_attr(text: ~str, lo: uint, hi: uint) -> ast::attribute {
 
 /* Conversion */
 
-fn attr_meta(attr: ast::attribute) -> @ast::meta_item { @attr.node.value }
+fn attr_meta(attr: ast::attribute) -> ast::meta_item { attr.node.value }
 
 // Get the meta_items from inside a vector of attributes
-fn attr_metas(attrs: ~[ast::attribute]) -> ~[@ast::meta_item] {
+fn attr_metas(attrs: ~[ast::attribute]) -> ~[ast::meta_item] {
     let mut mitems = ~[];
     for attrs.each |a| { vec::push(mitems, attr_meta(*a)); }
     return mitems;
@@ -112,7 +112,7 @@ fn get_attr_name(attr: ast::attribute) -> ~str {
     get_meta_item_name(@attr.node.value)
 }
 
-fn get_meta_item_name(meta: @ast::meta_item) -> ~str {
+fn get_meta_item_name(meta: &ast::meta_item) -> ~str {
     match meta.node {
       ast::meta_word(n) => n,
       ast::meta_name_value(n, _) => n,
@@ -124,7 +124,7 @@ fn get_meta_item_name(meta: @ast::meta_item) -> ~str {
  * Gets the string value if the meta_item is a meta_name_value variant
  * containing a string, otherwise none
  */
-fn get_meta_item_value_str(meta: @ast::meta_item) -> Option<~str> {
+fn get_meta_item_value_str(meta: &ast::meta_item) -> Option<~str> {
     match meta.node {
         ast::meta_name_value(_, v) => match v.node {
             ast::lit_str(s) => option::Some(*s),
@@ -135,7 +135,7 @@ fn get_meta_item_value_str(meta: @ast::meta_item) -> Option<~str> {
 }
 
 /// Gets a list of inner meta items from a list meta_item type
-fn get_meta_item_list(meta: @ast::meta_item) -> Option<~[@ast::meta_item]> {
+fn get_meta_item_list(meta: &ast::meta_item) -> Option<~[ast::meta_item]> {
     match meta.node {
       ast::meta_list(_, l) => option::Some(/* FIXME (#2543) */ copy l),
       _ => option::None
@@ -146,7 +146,7 @@ fn get_meta_item_list(meta: @ast::meta_item) -> Option<~[@ast::meta_item]> {
  * If the meta item is a nam-value type with a string value then returns
  * a tuple containing the name and string value, otherwise `none`
  */
-fn get_name_value_str_pair(item: @ast::meta_item) -> Option<(~str, ~str)> {
+fn get_name_value_str_pair(item: &ast::meta_item) -> Option<(~str, ~str)> {
     match attr::get_meta_item_value_str(item) {
       Some(value) => {
         let name = attr::get_meta_item_name(item);
@@ -173,10 +173,10 @@ fn find_attrs_by_name(attrs: ~[ast::attribute], name: ~str) ->
 }
 
 /// Searcha list of meta items and return only those with a specific name
-fn find_meta_items_by_name(metas: ~[@ast::meta_item], name: ~str) ->
-   ~[@ast::meta_item] {
-    let filter = fn@(&&m: @ast::meta_item) -> Option<@ast::meta_item> {
-        if get_meta_item_name(m) == name {
+fn find_meta_items_by_name(metas: ~[ast::meta_item], name: ~str) ->
+   ~[ast::meta_item] {
+    let filter = fn@(&&m: ast::meta_item) -> Option<ast::meta_item> {
+        if get_meta_item_name(&m) == name {
             option::Some(m)
         } else { option::None }
     };
@@ -187,14 +187,14 @@ fn find_meta_items_by_name(metas: ~[@ast::meta_item], name: ~str) ->
  * Returns true if a list of meta items contains another meta item. The
  * comparison is performed structurally.
  */
-fn contains(haystack: ~[@ast::meta_item], needle: @ast::meta_item) -> bool {
+fn contains(haystack: ~[ast::meta_item], needle: &ast::meta_item) -> bool {
     for haystack.each |item| {
-        if eq(*item, needle) { return true; }
+        if eq(item, needle) { return true; }
     }
     return false;
 }
 
-fn eq(a: @ast::meta_item, b: @ast::meta_item) -> bool {
+fn eq(a: &ast::meta_item, b: &ast::meta_item) -> bool {
     return match a.node {
           ast::meta_word(na) => match b.node {
             ast::meta_word(nb) => na == nb,
@@ -215,7 +215,7 @@ fn eq(a: @ast::meta_item, b: @ast::meta_item) -> bool {
         }
 }
 
-fn contains_name(metas: ~[@ast::meta_item], name: ~str) -> bool {
+fn contains_name(metas: ~[ast::meta_item], name: ~str) -> bool {
     let matches = find_meta_items_by_name(metas, name);
     return vec::len(matches) > 0u;
 }
@@ -229,23 +229,23 @@ fn first_attr_value_str_by_name(attrs: ~[ast::attribute], name: ~str)
 
     let mattrs = find_attrs_by_name(attrs, name);
     if vec::len(mattrs) > 0u {
-        return get_meta_item_value_str(attr_meta(mattrs[0]));
+        return get_meta_item_value_str(&attr_meta(mattrs[0]));
     }
     return option::None;
 }
 
-fn last_meta_item_by_name(items: ~[@ast::meta_item], name: ~str)
-    -> Option<@ast::meta_item> {
+fn last_meta_item_by_name(items: ~[ast::meta_item], name: ~str)
+    -> Option<ast::meta_item> {
 
     let items = attr::find_meta_items_by_name(items, name);
     vec::last_opt(items)
 }
 
-fn last_meta_item_value_str_by_name(items: ~[@ast::meta_item], name: ~str)
+fn last_meta_item_value_str_by_name(items: ~[ast::meta_item], name: ~str)
     -> Option<~str> {
 
     match last_meta_item_by_name(items, name) {
-      Some(item) => match attr::get_meta_item_value_str(item) {
+      Some(item) => match attr::get_meta_item_value_str(&item) {
         Some(value) => Some(value),
         None => None
       },
@@ -253,11 +253,11 @@ fn last_meta_item_value_str_by_name(items: ~[@ast::meta_item], name: ~str)
     }
 }
 
-fn last_meta_item_list_by_name(items: ~[@ast::meta_item], name: ~str)
-    -> Option<~[@ast::meta_item]> {
+fn last_meta_item_list_by_name(items: ~[ast::meta_item], name: ~str)
+    -> Option<~[ast::meta_item]> {
 
     match last_meta_item_by_name(items, name) {
-      Some(item) => attr::get_meta_item_list(item),
+      Some(item) => attr::get_meta_item_list(&item),
       None => None
     }
 }
@@ -267,8 +267,8 @@ fn last_meta_item_list_by_name(items: ~[@ast::meta_item], name: ~str)
 
 // FIXME (#607): This needs to sort by meta_item variant in addition to
 // the item name (See [Fixme-sorting])
-fn sort_meta_items(+items: ~[@ast::meta_item]) -> ~[@ast::meta_item] {
-    pure fn lteq(ma: &@ast::meta_item, mb: &@ast::meta_item) -> bool {
+fn sort_meta_items(+items: ~[ast::meta_item]) -> ~[ast::meta_item] {
+    pure fn lteq(ma: &ast::meta_item, mb: &ast::meta_item) -> bool {
         pure fn key(m: &ast::meta_item) -> ~str {
             match m.node {
               ast::meta_word(name) => name,
@@ -276,20 +276,20 @@ fn sort_meta_items(+items: ~[@ast::meta_item]) -> ~[@ast::meta_item] {
               ast::meta_list(name, _) => name
             }
         }
-        key(*ma) <= key(*mb)
+        key(ma) <= key(mb)
     }
 
     // This is sort of stupid here, converting to a vec of mutables and back
-    let v: ~[mut @ast::meta_item] = vec::to_mut(items);
+    let v: ~[mut ast::meta_item] = vec::to_mut(items);
     std::sort::quick_sort(lteq, v);
     vec::from_mut(move v)
 }
 
-fn remove_meta_items_by_name(items: ~[@ast::meta_item], name: ~str) ->
-   ~[@ast::meta_item] {
+fn remove_meta_items_by_name(items: ~[ast::meta_item], name: ~str) ->
+   ~[ast::meta_item] {
 
     return vec::filter_map(items, |item| {
-        if get_meta_item_name(item) != name {
+        if get_meta_item_name(&item) != name {
             option::Some(/* FIXME (#2543) */ copy item)
         } else {
             option::None
@@ -301,7 +301,7 @@ fn remove_meta_items_by_name(items: ~[@ast::meta_item], name: ~str) ->
  * From a list of crate attributes get only the meta_items that affect crate
  * linkage
  */
-fn find_linkage_metas(attrs: ~[ast::attribute]) -> ~[@ast::meta_item] {
+fn find_linkage_metas(attrs: ~[ast::attribute]) -> ~[ast::meta_item] {
     do find_attrs_by_name(attrs, ~"link").flat_map |attr| {
         match attr.node.value.node {
             ast::meta_list(_, items) => /* FIXME (#2543) */ copy items,
@@ -376,10 +376,10 @@ fn find_inline_attr(attrs: ~[ast::attribute]) -> inline_attr {
 
 
 fn require_unique_names(diagnostic: span_handler,
-                        metas: ~[@ast::meta_item]) {
+                        metas: ~[ast::meta_item]) {
     let map = map::HashMap();
     for metas.each |meta| {
-        let name = get_meta_item_name(*meta);
+        let name = get_meta_item_name(meta);
 
         // FIXME: How do I silence the warnings? --pcw (#2619)
         if map.contains_key(name) {
diff --git a/src/libsyntax/ext/pipes/ast_builder.rs b/src/libsyntax/ext/pipes/ast_builder.rs
index a4512b7b098..45c7483765e 100644
--- a/src/libsyntax/ext/pipes/ast_builder.rs
+++ b/src/libsyntax/ext/pipes/ast_builder.rs
@@ -215,8 +215,8 @@ impl ext_ctxt: ext_ctxt_ast_builder {
             style: ast::attr_outer,
             value: respan(self.empty_span(),
                           ast::meta_list(~"allow", ~[
-                              @respan(self.empty_span(),
-                                      ast::meta_word(~"non_camel_case_types"))
+                              respan(self.empty_span(),
+                                     ast::meta_word(~"non_camel_case_types"))
                           ])),
             is_sugared_doc: false
         });
diff --git a/src/libsyntax/fold.rs b/src/libsyntax/fold.rs
index c7ce86921f6..ee24857b96e 100644
--- a/src/libsyntax/fold.rs
+++ b/src/libsyntax/fold.rs
@@ -78,8 +78,8 @@ type ast_fold_precursor = @{
 /* some little folds that probably aren't useful to have in ast_fold itself*/
 
 //used in noop_fold_item and noop_fold_crate and noop_fold_crate_directive
-fn fold_meta_item_(&&mi: @meta_item, fld: ast_fold) -> @meta_item {
-    return @{node:
+fn fold_meta_item_(&&mi: meta_item, fld: ast_fold) -> meta_item {
+    return {node:
               match mi.node {
                 meta_word(id) => meta_word(id),
                 meta_list(id, mis) => {
@@ -97,7 +97,7 @@ fn fold_meta_item_(&&mi: @meta_item, fld: ast_fold) -> @meta_item {
 fn fold_attribute_(at: attribute, fld: ast_fold) ->
    attribute {
     return {node: {style: at.node.style,
-                value: *fold_meta_item_(@at.node.value, fld),
+                value: fold_meta_item_(at.node.value, fld),
                 is_sugared_doc: at.node.is_sugared_doc },
          span: fld.new_span(at.span)};
 }
diff --git a/src/libsyntax/parse/attr.rs b/src/libsyntax/parse/attr.rs
index 9be4909814b..fcbdf780773 100644
--- a/src/libsyntax/parse/attr.rs
+++ b/src/libsyntax/parse/attr.rs
@@ -18,9 +18,9 @@ trait parser_attr {
         ast::attribute;
     fn parse_inner_attrs_and_next() ->
         {inner: ~[ast::attribute], next: ~[ast::attribute]};
-    fn parse_meta_item() -> @ast::meta_item;
-    fn parse_meta_seq() -> ~[@ast::meta_item];
-    fn parse_optional_meta() -> ~[@ast::meta_item];
+    fn parse_meta_item() -> ast::meta_item;
+    fn parse_meta_seq() -> ~[ast::meta_item];
+    fn parse_optional_meta() -> ~[ast::meta_item];
 }
 
 impl parser: parser_attr {
@@ -91,7 +91,7 @@ impl parser: parser_attr {
         let meta_item = self.parse_meta_item();
         self.expect(token::RBRACKET);
         let mut hi = self.span.hi;
-        return spanned(lo, hi, {style: style, value: *meta_item,
+        return spanned(lo, hi, {style: style, value: meta_item,
                              is_sugared_doc: false});
     }
 
@@ -143,7 +143,7 @@ impl parser: parser_attr {
         return {inner: inner_attrs, next: next_outer_attrs};
     }
 
-    fn parse_meta_item() -> @ast::meta_item {
+    fn parse_meta_item() -> ast::meta_item {
         let lo = self.span.lo;
         let name = *self.id_to_str(self.parse_ident());
         match self.token {
@@ -151,27 +151,27 @@ impl parser: parser_attr {
             self.bump();
             let lit = self.parse_lit();
             let mut hi = self.span.hi;
-            return @spanned(lo, hi, ast::meta_name_value(name, lit));
+            return spanned(lo, hi, ast::meta_name_value(name, lit));
           }
           token::LPAREN => {
             let inner_items = self.parse_meta_seq();
             let mut hi = self.span.hi;
-            return @spanned(lo, hi, ast::meta_list(name, inner_items));
+            return spanned(lo, hi, ast::meta_list(name, inner_items));
           }
           _ => {
             let mut hi = self.span.hi;
-            return @spanned(lo, hi, ast::meta_word(name));
+            return spanned(lo, hi, ast::meta_word(name));
           }
         }
     }
 
-    fn parse_meta_seq() -> ~[@ast::meta_item] {
+    fn parse_meta_seq() -> ~[ast::meta_item] {
         return self.parse_seq(token::LPAREN, token::RPAREN,
                            seq_sep_trailing_disallowed(token::COMMA),
                            |p| p.parse_meta_item()).node;
     }
 
-    fn parse_optional_meta() -> ~[@ast::meta_item] {
+    fn parse_optional_meta() -> ~[ast::meta_item] {
         match self.token {
           token::LPAREN => return self.parse_meta_seq(),
           _ => return ~[]
diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs
index f41cdae7e03..a218e866710 100644
--- a/src/libsyntax/print/pprust.rs
+++ b/src/libsyntax/print/pprust.rs
@@ -159,7 +159,7 @@ fn block_to_str(blk: ast::blk, intr: ident_interner) -> ~str {
     }
 }
 
-fn meta_item_to_str(mi: @ast::meta_item, intr: ident_interner) -> ~str {
+fn meta_item_to_str(mi: ast::meta_item, intr: ident_interner) -> ~str {
     to_str(mi, print_meta_item, intr)
 }
 
@@ -800,11 +800,11 @@ fn print_attribute(s: ps, attr: ast::attribute) {
     maybe_print_comment(s, attr.span.lo);
     if attr.node.is_sugared_doc {
         let meta = attr::attr_meta(attr);
-        let comment = attr::get_meta_item_value_str(meta).get();
+        let comment = attr::get_meta_item_value_str(&meta).get();
         word(s.s, comment);
     } else {
         word(s.s, ~"#[");
-        print_meta_item(s, @attr.node.value);
+        print_meta_item(s, attr.node.value);
         word(s.s, ~"]");
     }
 }
@@ -1701,7 +1701,7 @@ fn print_type_params(s: ps, &&params: ~[ast::ty_param]) {
     }
 }
 
-fn print_meta_item(s: ps, &&item: @ast::meta_item) {
+fn print_meta_item(s: ps, &&item: ast::meta_item) {
     ibox(s, indent_unit);
     match item.node {
       ast::meta_word(name) => word(s.s, name),
diff --git a/src/rustc/back/link.rs b/src/rustc/back/link.rs
index c52b2c661ab..da5f924b865 100644
--- a/src/rustc/back/link.rs
+++ b/src/rustc/back/link.rs
@@ -385,23 +385,23 @@ fn build_link_meta(sess: session, c: ast::crate, output: &Path,
     type provided_metas =
         {name: Option<~str>,
          vers: Option<~str>,
-         cmh_items: ~[@ast::meta_item]};
+         cmh_items: ~[ast::meta_item]};
 
     fn provided_link_metas(sess: session, c: ast::crate) ->
        provided_metas {
         let mut name: Option<~str> = None;
         let mut vers: Option<~str> = None;
-        let mut cmh_items: ~[@ast::meta_item] = ~[];
+        let mut cmh_items: ~[ast::meta_item] = ~[];
         let linkage_metas = attr::find_linkage_metas(c.node.attrs);
         attr::require_unique_names(sess.diagnostic(), linkage_metas);
         for linkage_metas.each |meta| {
-            if attr::get_meta_item_name(*meta) == ~"name" {
-                match attr::get_meta_item_value_str(*meta) {
+            if attr::get_meta_item_name(meta) == ~"name" {
+                match attr::get_meta_item_value_str(meta) {
                   Some(v) => { name = Some(v); }
                   None => vec::push(cmh_items, *meta)
                 }
-            } else if attr::get_meta_item_name(*meta) == ~"vers" {
-                match attr::get_meta_item_value_str(*meta) {
+            } else if attr::get_meta_item_name(meta) == ~"vers" {
+                match attr::get_meta_item_value_str(meta) {
                   Some(v) => { vers = Some(v); }
                   None => vec::push(cmh_items, *meta)
                 }
diff --git a/src/rustc/front/config.rs b/src/rustc/front/config.rs
index 7599d94e0f6..d1545fd62a6 100644
--- a/src/rustc/front/config.rs
+++ b/src/rustc/front/config.rs
@@ -127,7 +127,7 @@ fn in_cfg(cfg: ast::crate_cfg, attrs: ~[ast::attribute]) -> bool {
     metas_in_cfg(cfg, attr::attr_metas(attrs))
 }
 
-fn metas_in_cfg(cfg: ast::crate_cfg, metas: ~[@ast::meta_item]) -> bool {
+fn metas_in_cfg(cfg: ast::crate_cfg, metas: ~[ast::meta_item]) -> bool {
 
     // The "cfg" attributes on the item
     let cfg_metas = attr::find_meta_items_by_name(metas, ~"cfg");
@@ -136,13 +136,13 @@ fn metas_in_cfg(cfg: ast::crate_cfg, metas: ~[@ast::meta_item]) -> bool {
     // so we can match against them. This is the list of configurations for
     // which the item is valid
     let cfg_metas = vec::concat(vec::filter_map(cfg_metas,
-        |&&i| attr::get_meta_item_list(i) ));
+        |&&i| attr::get_meta_item_list(&i) ));
 
     let has_cfg_metas = vec::len(cfg_metas) > 0u;
     if !has_cfg_metas { return true; }
 
     for cfg_metas.each |cfg_mi| {
-        if attr::contains(cfg, *cfg_mi) { return true; }
+        if attr::contains(cfg, cfg_mi) { return true; }
     }
 
     return false;
diff --git a/src/rustc/front/test.rs b/src/rustc/front/test.rs
index 27c070cd201..b40acbe8679 100644
--- a/src/rustc/front/test.rs
+++ b/src/rustc/front/test.rs
@@ -152,7 +152,7 @@ fn is_ignored(cx: test_ctxt, i: @ast::item) -> bool {
     let ignoreattrs = attr::find_attrs_by_name(i.attrs, ~"ignore");
     let ignoreitems = attr::attr_metas(ignoreattrs);
     let cfg_metas = vec::concat(vec::filter_map(ignoreitems,
-        |&&i| attr::get_meta_item_list(i) ));
+        |&&i| attr::get_meta_item_list(&i) ));
     return if vec::is_not_empty(ignoreitems) {
         config::metas_in_cfg(cx.crate.node.config, cfg_metas)
     } else {
diff --git a/src/rustc/metadata/creader.rs b/src/rustc/metadata/creader.rs
index 03e15487ab9..36857558fdc 100644
--- a/src/rustc/metadata/creader.rs
+++ b/src/rustc/metadata/creader.rs
@@ -41,7 +41,7 @@ type cache_entry = {
     cnum: int,
     span: span,
     hash: ~str,
-    metas: @~[@ast::meta_item]
+    metas: @~[ast::meta_item]
 };
 
 fn dump_crates(crate_cache: DVec<cache_entry>) {
@@ -150,7 +150,7 @@ fn visit_item(e: env, i: @ast::item) {
         }
 
         for link_args.each |a| {
-            match attr::get_meta_item_value_str(attr::attr_meta(*a)) {
+            match attr::get_meta_item_value_str(&attr::attr_meta(*a)) {
               Some(linkarg) => {
                 cstore::add_used_link_args(cstore, linkarg);
               }
@@ -162,8 +162,8 @@ fn visit_item(e: env, i: @ast::item) {
     }
 }
 
-fn metas_with(ident: ~str, key: ~str, metas: ~[@ast::meta_item])
-    -> ~[@ast::meta_item] {
+fn metas_with(ident: ~str, key: ~str, metas: ~[ast::meta_item])
+    -> ~[ast::meta_item] {
     let name_items = attr::find_meta_items_by_name(metas, key);
     if name_items.is_empty() {
         vec::append_one(metas, attr::mk_name_value_item_str(key, ident))
@@ -172,12 +172,12 @@ fn metas_with(ident: ~str, key: ~str, metas: ~[@ast::meta_item])
     }
 }
 
-fn metas_with_ident(ident: ~str, metas: ~[@ast::meta_item])
-    -> ~[@ast::meta_item] {
+fn metas_with_ident(ident: ~str, metas: ~[ast::meta_item])
+    -> ~[ast::meta_item] {
     metas_with(ident, ~"name", metas)
 }
 
-fn existing_match(e: env, metas: ~[@ast::meta_item], hash: ~str) ->
+fn existing_match(e: env, metas: ~[ast::meta_item], hash: ~str) ->
     Option<int> {
 
     for e.crate_cache.each |c| {
@@ -189,7 +189,7 @@ fn existing_match(e: env, metas: ~[@ast::meta_item], hash: ~str) ->
     return None;
 }
 
-fn resolve_crate(e: env, ident: ast::ident, metas: ~[@ast::meta_item],
+fn resolve_crate(e: env, ident: ast::ident, metas: ~[ast::meta_item],
                  hash: ~str, span: span) -> ast::crate_num {
     let metas = metas_with_ident(*e.intr.get(ident), metas);
 
diff --git a/src/rustc/metadata/csearch.rs b/src/rustc/metadata/csearch.rs
index e29a4fd436b..6d2d636cae2 100644
--- a/src/rustc/metadata/csearch.rs
+++ b/src/rustc/metadata/csearch.rs
@@ -108,7 +108,7 @@ fn get_method_names_if_trait(cstore: cstore::cstore, def: ast::def_id)
 
 fn get_item_attrs(cstore: cstore::cstore,
                   def_id: ast::def_id,
-                  f: fn(~[@ast::meta_item])) {
+                  f: fn(~[ast::meta_item])) {
 
     let cdata = cstore::get_crate_data(cstore, def_id.crate);
     decoder::get_item_attrs(cdata, def_id.node, f)
diff --git a/src/rustc/metadata/decoder.rs b/src/rustc/metadata/decoder.rs
index d817993f771..4c775d87c21 100644
--- a/src/rustc/metadata/decoder.rs
+++ b/src/rustc/metadata/decoder.rs
@@ -742,7 +742,7 @@ fn get_method_names_if_trait(intr: ident_interner, cdata: cmd,
 
 fn get_item_attrs(cdata: cmd,
                   node_id: ast::node_id,
-                  f: fn(~[@ast::meta_item])) {
+                  f: fn(~[ast::meta_item])) {
 
     let item = lookup_item(node_id, cdata.data);
     for ebml::tagged_docs(item, tag_attributes) |attributes| {
@@ -841,8 +841,8 @@ fn item_family_to_str(fam: Family) -> ~str {
     }
 }
 
-fn get_meta_items(md: ebml::Doc) -> ~[@ast::meta_item] {
-    let mut items: ~[@ast::meta_item] = ~[];
+fn get_meta_items(md: ebml::Doc) -> ~[ast::meta_item] {
+    let mut items: ~[ast::meta_item] = ~[];
     for ebml::tagged_docs(md, tag_meta_item_word) |meta_item_doc| {
         let nd = ebml::get_doc(meta_item_doc, tag_meta_item_name);
         let n = str::from_bytes(ebml::doc_data(nd));
@@ -877,7 +877,7 @@ fn get_attributes(md: ebml::Doc) -> ~[ast::attribute] {
             assert (vec::len(meta_items) == 1u);
             let meta_item = meta_items[0];
             vec::push(attrs,
-                      {node: {style: ast::attr_outer, value: *meta_item,
+                      {node: {style: ast::attr_outer, value: meta_item,
                               is_sugared_doc: false},
                        span: ast_util::dummy_sp()});
         };
diff --git a/src/rustc/metadata/encoder.rs b/src/rustc/metadata/encoder.rs
index e0d33035022..7f72d52cbfc 100644
--- a/src/rustc/metadata/encoder.rs
+++ b/src/rustc/metadata/encoder.rs
@@ -947,7 +947,7 @@ fn encode_meta_item(ebml_w: ebml::Writer, mi: meta_item) {
         ebml_w.writer.write(str::to_bytes(name));
         ebml_w.end_tag();
         for items.each |inner_item| {
-            encode_meta_item(ebml_w, **inner_item);
+            encode_meta_item(ebml_w, *inner_item);
         }
         ebml_w.end_tag();
       }
@@ -970,7 +970,7 @@ fn encode_attributes(ebml_w: ebml::Writer, attrs: ~[attribute]) {
 // them in anyway with default values.
 fn synthesize_crate_attrs(ecx: @encode_ctxt, crate: @crate) -> ~[attribute] {
 
-    fn synthesize_link_attr(ecx: @encode_ctxt, items: ~[@meta_item]) ->
+    fn synthesize_link_attr(ecx: @encode_ctxt, items: ~[meta_item]) ->
        attribute {
 
         assert (ecx.link_meta.name != ~"");
diff --git a/src/rustc/metadata/loader.rs b/src/rustc/metadata/loader.rs
index c45b189d697..8813be72653 100644
--- a/src/rustc/metadata/loader.rs
+++ b/src/rustc/metadata/loader.rs
@@ -31,7 +31,7 @@ type ctxt = {
     filesearch: filesearch,
     span: span,
     ident: ast::ident,
-    metas: ~[@ast::meta_item],
+    metas: ~[ast::meta_item],
     hash: ~str,
     os: os,
     static: bool,
@@ -120,11 +120,11 @@ fn find_library_crate_aux(cx: ctxt,
     }
 }
 
-fn crate_name_from_metas(metas: ~[@ast::meta_item]) -> ~str {
+fn crate_name_from_metas(metas: ~[ast::meta_item]) -> ~str {
     let name_items = attr::find_meta_items_by_name(metas, ~"name");
     match vec::last_opt(name_items) {
       Some(i) => {
-        match attr::get_meta_item_value_str(i) {
+        match attr::get_meta_item_value_str(&i) {
           Some(n) => n,
           // FIXME (#2406): Probably want a warning here since the user
           // is using the wrong type of meta item.
@@ -143,7 +143,7 @@ fn note_linkage_attrs(intr: ident_interner, diag: span_handler,
     }
 }
 
-fn crate_matches(crate_data: @~[u8], metas: ~[@ast::meta_item],
+fn crate_matches(crate_data: @~[u8], metas: ~[ast::meta_item],
                  hash: ~str) -> bool {
     let attrs = decoder::get_crate_attributes(crate_data);
     let linkage_metas = attr::find_linkage_metas(attrs);
@@ -154,14 +154,14 @@ fn crate_matches(crate_data: @~[u8], metas: ~[@ast::meta_item],
     metadata_matches(linkage_metas, metas)
 }
 
-fn metadata_matches(extern_metas: ~[@ast::meta_item],
-                    local_metas: ~[@ast::meta_item]) -> bool {
+fn metadata_matches(extern_metas: ~[ast::meta_item],
+                    local_metas: ~[ast::meta_item]) -> bool {
 
     debug!("matching %u metadata requirements against %u items",
            vec::len(local_metas), vec::len(extern_metas));
 
     for local_metas.each |needed| {
-        if !attr::contains(extern_metas, *needed) {
+        if !attr::contains(extern_metas, needed) {
             return false;
         }
     }
diff --git a/src/rustc/middle/lang_items.rs b/src/rustc/middle/lang_items.rs
index e33ff5dcf50..c3511051f65 100644
--- a/src/rustc/middle/lang_items.rs
+++ b/src/rustc/middle/lang_items.rs
@@ -208,7 +208,7 @@ impl LanguageItemCollector {
 
                 do get_item_attrs(crate_store, def_id) |meta_items| {
                     for meta_items.each |meta_item| {
-                        self.match_and_collect_meta_item(def_id, **meta_item);
+                        self.match_and_collect_meta_item(def_id, *meta_item);
                     }
                 }
             }
diff --git a/src/rustc/middle/trans/base.rs b/src/rustc/middle/trans/base.rs
index 3cd80a6e572..9225e5abf12 100644
--- a/src/rustc/middle/trans/base.rs
+++ b/src/rustc/middle/trans/base.rs
@@ -2368,10 +2368,10 @@ fn gather_local_rtcalls(ccx: @crate_ctxt, crate: @ast::crate) {
                 let attr_metas = attr::attr_metas(
                     attr::find_attrs_by_name(item.attrs, ~"rt"));
                 for vec::each(attr_metas) |attr_meta| {
-                    match attr::get_meta_item_list(*attr_meta) {
+                    match attr::get_meta_item_list(attr_meta) {
                         Some(list) => {
                             let head = vec::head(list);
-                            let name = attr::get_meta_item_name(head);
+                            let name = attr::get_meta_item_name(&head);
                             push_rtcall(ccx, name, {crate: ast::local_crate,
                                                     node: item.id});
                         }
diff --git a/src/rustdoc/attr_parser.rs b/src/rustdoc/attr_parser.rs
index e3522c9b4d7..3ba640f997a 100644
--- a/src/rustdoc/attr_parser.rs
+++ b/src/rustdoc/attr_parser.rs
@@ -37,7 +37,7 @@ mod test {
 
 fn doc_meta(
     attrs: ~[ast::attribute]
-) -> Option<@ast::meta_item> {
+) -> Option<ast::meta_item> {
 
     /*!
      * Given a vec of attributes, extract the meta_items contained in the \
@@ -58,7 +58,7 @@ fn doc_meta(
 
 fn doc_metas(
     attrs: ~[ast::attribute]
-) -> ~[@ast::meta_item] {
+) -> ~[ast::meta_item] {
 
     let doc_attrs = attr::find_attrs_by_name(attrs, ~"doc");
     let doc_metas = do doc_attrs.map |attr| {
@@ -103,7 +103,7 @@ fn should_not_extract_crate_name_if_no_name_value_in_link_attribute() {
 fn parse_desc(attrs: ~[ast::attribute]) -> Option<~str> {
     match doc_meta(attrs) {
       Some(meta) => {
-        attr::get_meta_item_value_str(meta)
+        attr::get_meta_item_value_str(&meta)
       }
       None => None
     }
@@ -127,7 +127,7 @@ fn parse_desc_should_parse_simple_doc_attributes() {
 
 fn parse_hidden(attrs: ~[ast::attribute]) -> bool {
     do doc_metas(attrs).find |meta| {
-        match attr::get_meta_item_list(meta) {
+        match attr::get_meta_item_list(&meta) {
           Some(metas) => {
             let hiddens = attr::find_meta_items_by_name(metas, ~"hidden");
             vec::is_not_empty(hiddens)