Revert "syntax: Make attributes sendable for rustdoc's benefit"

This reverts commit 90e3665fa79d32c3188169cfa992516fb36b81a8.
This commit is contained in:
Brian Anderson 2012-09-20 18:15:39 -07:00
parent 90e3665fa7
commit f5be40384f
18 changed files with 106 additions and 106 deletions

View File

@ -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,

View File

@ -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])
}

View File

@ -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) {

View File

@ -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
});

View File

@ -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)};
}

View File

@ -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 ~[]

View File

@ -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),

View File

@ -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)
}

View File

@ -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;

View File

@ -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 {

View File

@ -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);

View File

@ -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)

View File

@ -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()});
};

View File

@ -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 != ~"");

View File

@ -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;
}
}

View File

@ -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);
}
}
}

View File

@ -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});
}

View File

@ -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)