Revert "syntax: Make attributes sendable for rustdoc's benefit"
This reverts commit 90e3665fa79d32c3188169cfa992516fb36b81a8.
This commit is contained in:
parent
90e3665fa7
commit
f5be40384f
@ -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,
|
||||
|
@ -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])
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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
|
||||
});
|
||||
|
@ -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)};
|
||||
}
|
||||
|
@ -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 ~[]
|
||||
|
@ -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),
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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 {
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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()});
|
||||
};
|
||||
|
@ -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 != ~"");
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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});
|
||||
}
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user