From f5be40384fc3a0815600ee44670b313f9cf6a4eb Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Thu, 20 Sep 2012 18:15:39 -0700 Subject: [PATCH] Revert "syntax: Make attributes sendable for rustdoc's benefit" This reverts commit 90e3665fa79d32c3188169cfa992516fb36b81a8. --- src/cargo/cargo.rs | 6 +- src/libsyntax/ast.rs | 6 +- src/libsyntax/attr.rs | 84 +++++++++++++------------- src/libsyntax/ext/pipes/ast_builder.rs | 4 +- src/libsyntax/fold.rs | 6 +- src/libsyntax/parse/attr.rs | 20 +++--- src/libsyntax/print/pprust.rs | 8 +-- src/rustc/back/link.rs | 12 ++-- src/rustc/front/config.rs | 6 +- src/rustc/front/test.rs | 2 +- src/rustc/metadata/creader.rs | 16 ++--- src/rustc/metadata/csearch.rs | 2 +- src/rustc/metadata/decoder.rs | 8 +-- src/rustc/metadata/encoder.rs | 4 +- src/rustc/metadata/loader.rs | 14 ++--- src/rustc/middle/lang_items.rs | 2 +- src/rustc/middle/trans/base.rs | 4 +- src/rustdoc/attr_parser.rs | 8 +-- 18 files changed, 106 insertions(+), 106 deletions(-) diff --git a/src/cargo/cargo.rs b/src/cargo/cargo.rs index d5a5528f8c9..e648e6120ce 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 { 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 90d9dd28c9b..3f41c03b927 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; @@ -420,7 +420,7 @@ type meta_item = spanned; #[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 f8792ab6c20..1a8096484c2 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 { - 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 { +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 45c7483765e..a4512b7b098 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 ee24857b96e..c7ce86921f6 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 fcbdf780773..9be4909814b 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 a218e866710..f41cdae7e03 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, &¶ms: ~[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 da5f924b865..c52b2c661ab 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 d1545fd62a6..7599d94e0f6 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 b40acbe8679..27c070cd201 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 36857558fdc..03e15487ab9 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) { @@ -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 { 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 6d2d636cae2..e29a4fd436b 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 4c775d87c21..d817993f771 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 7f72d52cbfc..e0d33035022 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 8813be72653..c45b189d697 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 c3511051f65..e33ff5dcf50 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 9225e5abf12..3cd80a6e572 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 3ba640f997a..e3522c9b4d7 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 { +) -> 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)