From 9da641bd8c186412813dca899cc8a0eb509122d9 Mon Sep 17 00:00:00 2001 From: Erick Tryzelaar Date: Sat, 9 Feb 2013 13:22:21 -0800 Subject: libsyntax: convert interner into a modern struct --- src/libsyntax/parse/token.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/libsyntax/parse') diff --git a/src/libsyntax/parse/token.rs b/src/libsyntax/parse/token.rs index bdd26fc00a7..f145e433fa7 100644 --- a/src/libsyntax/parse/token.rs +++ b/src/libsyntax/parse/token.rs @@ -429,7 +429,7 @@ pub fn mk_ident_interner() -> @ident_interner { ]; let rv = @ident_interner { - interner: interner::mk_prefill(init_vec) + interner: interner::Interner::prefill(init_vec) }; task::local_data::local_data_set(interner_key!(), @rv); @@ -443,7 +443,7 @@ pub fn mk_ident_interner() -> @ident_interner { /* for when we don't care about the contents; doesn't interact with TLD or serialization */ pub fn mk_fake_ident_interner() -> @ident_interner { - @ident_interner { interner: interner::mk::<@~str>() } + @ident_interner { interner: interner::Interner::new() } } /** -- cgit 1.4.1-3-g733a5 From e6d84268fa18da997918b37e5b0325bed240939a Mon Sep 17 00:00:00 2001 From: Erick Tryzelaar Date: Mon, 11 Feb 2013 08:28:41 -0800 Subject: Change functions from taking ~str to taking &str --- src/librustc/back/link.rs | 12 ++++++------ src/libsyntax/parse/comments.rs | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) (limited to 'src/libsyntax/parse') diff --git a/src/librustc/back/link.rs b/src/librustc/back/link.rs index bd9c7f1616d..02f1877e2f9 100644 --- a/src/librustc/back/link.rs +++ b/src/librustc/back/link.rs @@ -487,12 +487,12 @@ pub fn build_link_meta(sess: Session, c: &ast::crate, output: &Path, fn crate_meta_extras_hash(symbol_hasher: &hash::State, -cmh_items: ~[@ast::meta_item], dep_hashes: ~[~str]) -> @str { - fn len_and_str(s: ~str) -> ~str { - return fmt!("%u_%s", str::len(s), s); + fn len_and_str(s: &str) -> ~str { + fmt!("%u_%s", s.len(), s) } fn len_and_str_lit(l: ast::lit) -> ~str { - return len_and_str(pprust::lit_to_str(@l)); + len_and_str(pprust::lit_to_str(@l)) } let cmh_items = attr::sort_meta_items(cmh_items); @@ -615,7 +615,7 @@ pub fn get_symbol_hash(ccx: @crate_ctxt, t: ty::t) -> @str { // Name sanitation. LLVM will happily accept identifiers with weird names, but // gas doesn't! -pub fn sanitize(s: ~str) -> ~str { +pub fn sanitize(s: &str) -> ~str { let mut result = ~""; for str::chars_each(s) |c| { match c { @@ -629,10 +629,10 @@ pub fn sanitize(s: ~str) -> ~str { 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' - | '_' => str::push_char(&mut result, c), + | '_' => result.push_char(c), _ => { if c > 'z' && char::is_XID_continue(c) { - str::push_char(&mut result, c); + result.push_char(c); } } } diff --git a/src/libsyntax/parse/comments.rs b/src/libsyntax/parse/comments.rs index d58d894b6a0..e27784d1f6b 100644 --- a/src/libsyntax/parse/comments.rs +++ b/src/libsyntax/parse/comments.rs @@ -46,14 +46,14 @@ impl cmp::Eq for cmnt_style { pub type cmnt = {style: cmnt_style, lines: ~[~str], pos: BytePos}; -pub fn is_doc_comment(s: ~str) -> bool { +pub fn is_doc_comment(s: &str) -> bool { (s.starts_with(~"///") && !is_line_non_doc_comment(s)) || s.starts_with(~"//!") || (s.starts_with(~"/**") && !is_block_non_doc_comment(s)) || s.starts_with(~"/*!") } -pub fn doc_comment_style(comment: ~str) -> ast::attr_style { +pub fn doc_comment_style(comment: &str) -> ast::attr_style { assert is_doc_comment(comment); if comment.starts_with(~"//!") || comment.starts_with(~"/*!") { ast::attr_inner @@ -62,7 +62,7 @@ pub fn doc_comment_style(comment: ~str) -> ast::attr_style { } } -pub fn strip_doc_comment_decoration(comment: ~str) -> ~str { +pub fn strip_doc_comment_decoration(comment: &str) -> ~str { /// remove whitespace-only lines from the start/end of lines fn vertical_trim(lines: ~[~str]) -> ~[~str] { -- cgit 1.4.1-3-g733a5 From a2b754788d5cef4b03eee0af6137e0195ef5680c Mon Sep 17 00:00:00 2001 From: Erick Tryzelaar Date: Thu, 14 Feb 2013 20:19:27 -0800 Subject: convert syntax::attr to use @~strs --- src/librustc/back/link.rs | 4 +- src/librustc/driver/driver.rs | 22 +++--- src/librustc/driver/session.rs | 2 +- src/librustc/front/test.rs | 8 +- src/librustc/metadata/creader.rs | 21 +++--- src/librustc/metadata/decoder.rs | 8 +- src/librustc/metadata/encoder.rs | 12 +-- src/librustc/metadata/loader.rs | 2 +- src/librustc/middle/trans/foreign.rs | 2 +- src/librustdoc/attr_parser.rs | 5 +- src/librustpkg/util.rs | 4 +- src/libsyntax/attr.rs | 142 +++++++++++++++++------------------ src/libsyntax/ext/auto_encode.rs | 4 +- src/libsyntax/ext/expand.rs | 4 +- src/libsyntax/parse/parser.rs | 14 ++-- src/libsyntax/print/pprust.rs | 8 +- 16 files changed, 130 insertions(+), 132 deletions(-) (limited to 'src/libsyntax/parse') diff --git a/src/librustc/back/link.rs b/src/librustc/back/link.rs index 02f1877e2f9..fefd49d7815 100644 --- a/src/librustc/back/link.rs +++ b/src/librustc/back/link.rs @@ -466,14 +466,14 @@ pub fn build_link_meta(sess: Session, c: &ast::crate, output: &Path, 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" { + if *attr::get_meta_item_name(*meta) == ~"name" { match attr::get_meta_item_value_str(*meta) { // Changing attr would avoid the need for the copy // here Some(v) => { name = Some(v.to_managed()); } None => cmh_items.push(*meta) } - } else if attr::get_meta_item_name(*meta) == ~"vers" { + } else if *attr::get_meta_item_name(*meta) == ~"vers" { match attr::get_meta_item_value_str(*meta) { Some(v) => { vers = Some(v.to_managed()); } None => cmh_items.push(*meta) diff --git a/src/librustc/driver/driver.rs b/src/librustc/driver/driver.rs index 8569415e29e..8894aad4816 100644 --- a/src/librustc/driver/driver.rs +++ b/src/librustc/driver/driver.rs @@ -97,16 +97,16 @@ pub fn default_configuration(sess: Session, +argv0: ~str, input: input) -> }; return ~[ // Target bindings. - attr::mk_word_item(str::from_slice(os::FAMILY)), - mk(~"target_os", tos), - mk(~"target_family", str::from_slice(os::FAMILY)), - mk(~"target_arch", arch), - mk(~"target_endian", end), - mk(~"target_word_size", wordsz), - mk(~"target_libc", libc), + attr::mk_word_item(@str::from_slice(os::FAMILY)), + mk(@~"target_os", @tos), + mk(@~"target_family", @str::from_slice(os::FAMILY)), + mk(@~"target_arch", @arch), + mk(@~"target_endian", @end), + mk(@~"target_word_size", @wordsz), + mk(@~"target_libc", @libc), // Build bindings. - mk(~"build_compiler", argv0), - mk(~"build_input", source_name(input))]; + mk(@~"build_compiler", @argv0), + mk(@~"build_input", @source_name(input))]; } pub fn append_configuration(+cfg: ast::crate_cfg, +name: ~str) @@ -114,7 +114,7 @@ pub fn append_configuration(+cfg: ast::crate_cfg, +name: ~str) if attr::contains_name(cfg, name) { cfg } else { - vec::append_one(cfg, attr::mk_word_item(name)) + vec::append_one(cfg, attr::mk_word_item(@name)) } } @@ -142,7 +142,7 @@ pub fn parse_cfgspecs(cfgspecs: ~[~str]) -> ast::crate_cfg { // meta_word variant. let mut words = ~[]; for cfgspecs.each |s| { - words.push(attr::mk_word_item(/*bad*/copy *s)); + words.push(attr::mk_word_item(@/*bad*/copy *s)); } return words; } diff --git a/src/librustc/driver/session.rs b/src/librustc/driver/session.rs index 1a299f22ec0..4d7f55584bb 100644 --- a/src/librustc/driver/session.rs +++ b/src/librustc/driver/session.rs @@ -310,7 +310,7 @@ pub fn building_library(req_crate_type: crate_type, match syntax::attr::first_attr_value_str_by_name( crate.node.attrs, ~"crate_type") { - option::Some(~"lib") => true, + Some(@~"lib") => true, _ => false } } diff --git a/src/librustc/front/test.rs b/src/librustc/front/test.rs index 90b83e9bd6e..9955ef4a8e9 100644 --- a/src/librustc/front/test.rs +++ b/src/librustc/front/test.rs @@ -57,7 +57,7 @@ pub fn modify_for_testing(sess: session::Session, // configuration, either with the '--test' or '--cfg test' // command line options. let should_test = attr::contains(crate.node.config, - attr::mk_word_item(~"test")); + attr::mk_word_item(@~"test")); if should_test { generate_test_harness(sess, crate) @@ -111,7 +111,7 @@ fn fold_mod(cx: @mut TestCtxt, fn nomain(cx: @mut TestCtxt, item: @ast::item) -> @ast::item { if !*cx.sess.building_library { @ast::item{attrs: item.attrs.filtered(|attr| { - attr::get_attr_name(attr) != ~"main" + *attr::get_attr_name(attr) != ~"main" }),.. copy *item} } else { item } } @@ -310,7 +310,7 @@ fn mk_test_module(cx: &TestCtxt) -> @ast::item { // This attribute tells resolve to let us call unexported functions let resolve_unexported_attr = - attr::mk_attr(attr::mk_word_item(~"!resolve_unexported")); + attr::mk_attr(attr::mk_word_item(@~"!resolve_unexported")); let item = ast::item { ident: cx.sess.ident_of(~"__test"), @@ -366,7 +366,7 @@ fn is_std(cx: &TestCtxt) -> bool { let is_std = { let items = attr::find_linkage_metas(cx.crate.node.attrs); match attr::last_meta_item_value_str_by_name(items, ~"name") { - Some(~"std") => true, + Some(@~"std") => true, _ => false } }; diff --git a/src/librustc/metadata/creader.rs b/src/librustc/metadata/creader.rs index 9f642d80665..b18a52a9486 100644 --- a/src/librustc/metadata/creader.rs +++ b/src/librustc/metadata/creader.rs @@ -105,7 +105,7 @@ fn warn_if_multiple_versions(e: @mut Env, diag.span_note(match_.span, ~"used here"); let attrs = ~[ attr::mk_attr(attr::mk_list_item( - ~"link", /*bad*/copy *match_.metas)) + @~"link", /*bad*/copy *match_.metas)) ]; loader::note_linkage_attrs(e.intr, diag, attrs); } @@ -133,7 +133,7 @@ fn visit_crate(e: @mut Env, c: ast::crate) { for link_args.each |a| { match attr::get_meta_item_value_str(attr::attr_meta(*a)) { Some(ref linkarg) => { - cstore::add_used_link_args(cstore, (/*bad*/copy *linkarg)); + cstore::add_used_link_args(cstore, **linkarg); } None => {/* fallthrough */ } } @@ -173,21 +173,22 @@ fn visit_item(e: @mut Env, i: @ast::item) { match attr::first_attr_value_str_by_name(i.attrs, ~"link_name") { Some(ref nn) => { - if (*nn) == ~"" { + if **nn == ~"" { e.diag.span_fatal( i.span, ~"empty #[link_name] not allowed; use #[nolink]."); } (/*bad*/copy *nn) } - None => /*bad*/copy *e.intr.get(i.ident) + None => @/*bad*/copy *e.intr.get(i.ident) }; if attr::find_attrs_by_name(i.attrs, ~"nolink").is_empty() { already_added = - !cstore::add_used_library(cstore, copy foreign_name); + !cstore::add_used_library(cstore, + /*bad*/ copy *foreign_name); } if !link_args.is_empty() && already_added { - e.diag.span_fatal(i.span, ~"library '" + foreign_name + + e.diag.span_fatal(i.span, ~"library '" + *foreign_name + ~"' already added: can't specify link_args."); } } @@ -197,7 +198,7 @@ fn visit_item(e: @mut Env, i: @ast::item) { for link_args.each |a| { match attr::get_meta_item_value_str(attr::attr_meta(*a)) { Some(ref linkarg) => { - cstore::add_used_link_args(cstore, *linkarg); + cstore::add_used_link_args(cstore, /*bad*/copy **linkarg); } None => {/* fallthrough */ } } @@ -211,7 +212,7 @@ 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)) + vec::append_one(metas, attr::mk_name_value_item_str(@key, @ident)) } else { metas } @@ -276,9 +277,9 @@ fn resolve_crate(e: @mut Env, match attr::last_meta_item_value_str_by_name(load_ctxt.metas, ~"name") { option::Some(ref v) => (/*bad*/copy *v), - option::None => /*bad*/copy *e.intr.get(ident) + option::None => @/*bad*/copy *e.intr.get(ident) }; - let cmeta = @{name: cname, data: cdata, + let cmeta = @{name: /*bad*/copy *cname, data: cdata, cnum_map: cnum_map, cnum: cnum}; let cstore = e.cstore; diff --git a/src/librustc/metadata/decoder.rs b/src/librustc/metadata/decoder.rs index 644cf3af0bd..c862490388d 100644 --- a/src/librustc/metadata/decoder.rs +++ b/src/librustc/metadata/decoder.rs @@ -962,7 +962,7 @@ fn get_meta_items(md: ebml::Doc) -> ~[@ast::meta_item] { for reader::tagged_docs(md, tag_meta_item_word) |meta_item_doc| { let nd = reader::get_doc(meta_item_doc, tag_meta_item_name); let n = str::from_bytes(reader::doc_data(nd)); - items.push(attr::mk_word_item(n)); + items.push(attr::mk_word_item(@n)); }; for reader::tagged_docs(md, tag_meta_item_name_value) |meta_item_doc| { let nd = reader::get_doc(meta_item_doc, tag_meta_item_name); @@ -971,13 +971,13 @@ fn get_meta_items(md: ebml::Doc) -> ~[@ast::meta_item] { let v = str::from_bytes(reader::doc_data(vd)); // FIXME (#623): Should be able to decode meta_name_value variants, // but currently the encoder just drops them - items.push(attr::mk_name_value_item_str(n, v)); + items.push(attr::mk_name_value_item_str(@n, @v)); }; for reader::tagged_docs(md, tag_meta_item_list) |meta_item_doc| { let nd = reader::get_doc(meta_item_doc, tag_meta_item_name); let n = str::from_bytes(reader::doc_data(nd)); let subitems = get_meta_items(meta_item_doc); - items.push(attr::mk_list_item(n, subitems)); + items.push(attr::mk_list_item(@n, subitems)); }; return items; } @@ -1073,7 +1073,7 @@ pub fn get_crate_vers(data: @~[u8]) -> ~str { let attrs = decoder::get_crate_attributes(data); return match attr::last_meta_item_value_str_by_name( attr::find_linkage_metas(attrs), ~"vers") { - Some(ref ver) => (/*bad*/copy *ver), + Some(ref ver) => (/*bad*/copy **ver), None => ~"0.0" }; } diff --git a/src/librustc/metadata/encoder.rs b/src/librustc/metadata/encoder.rs index 66ccbd97e0d..cf27c6e65f6 100644 --- a/src/librustc/metadata/encoder.rs +++ b/src/librustc/metadata/encoder.rs @@ -1075,11 +1075,11 @@ fn synthesize_crate_attrs(ecx: @encode_ctxt, crate: &crate) -> ~[attribute] { assert !ecx.link_meta.vers.is_empty(); let name_item = - attr::mk_name_value_item_str(~"name", - ecx.link_meta.name.to_owned()); + attr::mk_name_value_item_str(@~"name", + @ecx.link_meta.name.to_owned()); let vers_item = - attr::mk_name_value_item_str(~"vers", - ecx.link_meta.vers.to_owned()); + attr::mk_name_value_item_str(@~"vers", + @ecx.link_meta.vers.to_owned()); let other_items = { @@ -1088,7 +1088,7 @@ fn synthesize_crate_attrs(ecx: @encode_ctxt, crate: &crate) -> ~[attribute] { }; let meta_items = vec::append(~[name_item, vers_item], other_items); - let link_item = attr::mk_list_item(~"link", meta_items); + let link_item = attr::mk_list_item(@~"link", meta_items); return attr::mk_attr(link_item); } @@ -1097,7 +1097,7 @@ fn synthesize_crate_attrs(ecx: @encode_ctxt, crate: &crate) -> ~[attribute] { let mut found_link_attr = false; for crate.node.attrs.each |attr| { attrs.push( - if attr::get_attr_name(attr) != ~"link" { + if *attr::get_attr_name(attr) != ~"link" { /*bad*/copy *attr } else { match /*bad*/copy attr.node.value.node { diff --git a/src/librustc/metadata/loader.rs b/src/librustc/metadata/loader.rs index ad19eed6992..d2650696307 100644 --- a/src/librustc/metadata/loader.rs +++ b/src/librustc/metadata/loader.rs @@ -147,7 +147,7 @@ pub fn crate_name_from_metas(+metas: ~[@ast::meta_item]) -> ~str { match vec::last_opt(name_items) { Some(i) => { match attr::get_meta_item_value_str(i) { - Some(ref n) => (/*bad*/copy *n), + Some(ref n) => /*bad*/copy **n, // FIXME (#2406): Probably want a warning here since the user // is using the wrong type of meta item. _ => fail!() diff --git a/src/librustc/middle/trans/foreign.rs b/src/librustc/middle/trans/foreign.rs index 92852930a66..4446eda64b0 100644 --- a/src/librustc/middle/trans/foreign.rs +++ b/src/librustc/middle/trans/foreign.rs @@ -50,7 +50,7 @@ fn abi_info(arch: session::arch) -> cabi::ABIInfo { pub fn link_name(ccx: @crate_ctxt, i: @ast::foreign_item) -> ~str { match attr::first_attr_value_str_by_name(i.attrs, ~"link_name") { None => ccx.sess.str_of(i.ident), - option::Some(ref ln) => (/*bad*/copy *ln) + option::Some(ref ln) => (/*bad*/copy **ln) } } diff --git a/src/librustdoc/attr_parser.rs b/src/librustdoc/attr_parser.rs index 0beb651afc4..bb9ba93cbe0 100644 --- a/src/librustdoc/attr_parser.rs +++ b/src/librustdoc/attr_parser.rs @@ -65,9 +65,10 @@ fn doc_metas( pub fn parse_crate(attrs: ~[ast::attribute]) -> CrateAttrs { let link_metas = attr::find_linkage_metas(attrs); + let name = attr::last_meta_item_value_str_by_name(link_metas, ~"name"); CrateAttrs { - name: attr::last_meta_item_value_str_by_name(link_metas, ~"name") + name: name.map(|s| copy **s) } } @@ -97,7 +98,7 @@ fn should_not_extract_crate_name_if_no_name_value_in_link_attribute() { pub fn parse_desc(attrs: ~[ast::attribute]) -> Option<~str> { let doc_strs = do doc_metas(attrs).filter_mapped |meta| { - attr::get_meta_item_value_str(*meta) + attr::get_meta_item_value_str(*meta).map(|s| copy **s) }; if doc_strs.is_empty() { None diff --git a/src/librustpkg/util.rs b/src/librustpkg/util.rs index 1ad706742a8..f2b1e41bbd1 100644 --- a/src/librustpkg/util.rs +++ b/src/librustpkg/util.rs @@ -81,7 +81,7 @@ fn fold_mod(_ctx: @ReadyCtx, m: ast::_mod, fn strip_main(item: @ast::item) -> @ast::item { @ast::item { attrs: do item.attrs.filtered |attr| { - attr::get_attr_name(*attr) != ~"main" + *attr::get_attr_name(attr) != ~"main" }, .. copy *item } @@ -609,7 +609,7 @@ pub fn compile_input(sysroot: Option, input: driver::input, dir: &Path, let mut crate_cfg = options.cfg; for cfgs.each |&cfg| { - crate_cfg.push(attr::mk_word_item(cfg)); + crate_cfg.push(attr::mk_word_item(@cfg)); } let options = @{ diff --git a/src/libsyntax/attr.rs b/src/libsyntax/attr.rs index 8ba232a5aa9..bbe18a7fcc0 100644 --- a/src/libsyntax/attr.rs +++ b/src/libsyntax/attr.rs @@ -29,24 +29,24 @@ use std; /* Constructors */ -pub fn mk_name_value_item_str(name: ~str, value: ~str) +pub fn mk_name_value_item_str(name: @~str, value: @~str) -> @ast::meta_item { - let value_lit = dummy_spanned(ast::lit_str(@value)); - return mk_name_value_item(name, value_lit); + let value_lit = dummy_spanned(ast::lit_str(value)); + mk_name_value_item(name, value_lit) } -pub fn mk_name_value_item(name: ~str, +value: ast::lit) +pub fn mk_name_value_item(name: @~str, +value: ast::lit) -> @ast::meta_item { - return @dummy_spanned(ast::meta_name_value(name, value)); + @dummy_spanned(ast::meta_name_value(/*bad*/ copy *name, value)) } -pub fn mk_list_item(name: ~str, +items: ~[@ast::meta_item]) -> +pub fn mk_list_item(name: @~str, +items: ~[@ast::meta_item]) -> @ast::meta_item { - return @dummy_spanned(ast::meta_list(name, items)); + @dummy_spanned(ast::meta_list(/*bad*/ copy *name, items)) } -pub fn mk_word_item(name: ~str) -> @ast::meta_item { - return @dummy_spanned(ast::meta_word(name)); +pub fn mk_word_item(name: @~str) -> @ast::meta_item { + @dummy_spanned(ast::meta_word(/*bad*/ copy *name)) } pub fn mk_attr(item: @ast::meta_item) -> ast::attribute { @@ -80,9 +80,9 @@ pub fn attr_metas(attrs: ~[ast::attribute]) -> ~[@ast::meta_item] { pub fn desugar_doc_attr(attr: &ast::attribute) -> ast::attribute { if attr.node.is_sugared_doc { let comment = get_meta_item_value_str(@attr.node.value).get(); - let meta = mk_name_value_item_str(~"doc", - strip_doc_comment_decoration(comment)); - return mk_attr(meta); + let meta = mk_name_value_item_str(@~"doc", + @strip_doc_comment_decoration(*comment)); + mk_attr(meta) } else { *attr } @@ -90,15 +90,15 @@ pub fn desugar_doc_attr(attr: &ast::attribute) -> ast::attribute { /* Accessors */ -pub fn get_attr_name(attr: &ast::attribute) -> ~str { +pub pure fn get_attr_name(attr: &ast::attribute) -> @~str { get_meta_item_name(@attr.node.value) } -pub fn get_meta_item_name(meta: @ast::meta_item) -> ~str { +pub pure fn get_meta_item_name(meta: @ast::meta_item) -> @~str { match meta.node { - ast::meta_word(ref n) => (*n), - ast::meta_name_value(ref n, _) => (*n), - ast::meta_list(ref n, _) => (*n) + ast::meta_word(ref n) => @/*bad*/ copy *n, + ast::meta_name_value(ref n, _) => @/*bad*/ copy *n, + ast::meta_list(ref n, _) => @/*bad*/ copy *n, } } @@ -106,13 +106,15 @@ pub 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 */ -pub fn get_meta_item_value_str(meta: @ast::meta_item) -> Option<~str> { +pub 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), - _ => option::None + ast::meta_name_value(_, v) => { + match v.node { + ast::lit_str(s) => Some(s), + _ => None, + } }, - _ => option::None + _ => None } } @@ -130,11 +132,11 @@ pub fn get_meta_item_list(meta: @ast::meta_item) * a tuple containing the name and string value, otherwise `none` */ pub fn get_name_value_str_pair(item: @ast::meta_item) - -> Option<(~str, ~str)> { + -> Option<(@~str, @~str)> { match attr::get_meta_item_value_str(item) { - Some(ref value) => { + Some(value) => { let name = attr::get_meta_item_name(item); - Some((name, (*value))) + Some((name, value)) } None => None } @@ -147,7 +149,7 @@ pub fn get_name_value_str_pair(item: @ast::meta_item) pub fn find_attrs_by_name(attrs: &[ast::attribute], name: &str) -> ~[ast::attribute] { do vec::filter_mapped(attrs) |a| { - if name == get_attr_name(a) { + if name == *get_attr_name(a) { Some(*a) } else { None @@ -160,7 +162,7 @@ pub fn find_meta_items_by_name(metas: &[@ast::meta_item], name: &str) -> ~[@ast::meta_item] { let mut rs = ~[]; for metas.each |mi| { - if name == get_meta_item_name(*mi) { + if name == *get_meta_item_name(*mi) { rs.push(*mi) } } @@ -213,36 +215,39 @@ pub fn attrs_contains_name(attrs: &[ast::attribute], name: &str) -> bool { !find_attrs_by_name(attrs, name).is_empty() } -pub fn first_attr_value_str_by_name(attrs: ~[ast::attribute], name: ~str) - -> Option<~str> { +pub fn first_attr_value_str_by_name(attrs: ~[ast::attribute], name: &str) + -> Option<@~str> { let mattrs = find_attrs_by_name(attrs, name); - if vec::len(mattrs) > 0u { - return get_meta_item_value_str(attr_meta(mattrs[0])); + if mattrs.len() > 0 { + get_meta_item_value_str(attr_meta(mattrs[0])) + } else { + None } - return option::None; } -fn last_meta_item_by_name(items: ~[@ast::meta_item], name: ~str) +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) } -pub fn last_meta_item_value_str_by_name(items: ~[@ast::meta_item], name: ~str) - -> Option<~str> { +pub 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(ref value) => Some((*value)), + Some(item) => { + match attr::get_meta_item_value_str(item) { + Some(value) => Some(value), + None => None + } + }, None => None - }, - None => None } } -pub fn last_meta_item_list_by_name(items: ~[@ast::meta_item], name: ~str) +pub 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) { @@ -255,20 +260,11 @@ pub fn last_meta_item_list_by_name(items: ~[@ast::meta_item], name: ~str) /* Higher-level applications */ pub 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(ref name) => (*name), - ast::meta_name_value(ref name, _) => (*name), - ast::meta_list(ref name, _) => (*name) - } - } - key(*ma) <= key(*mb) - } - // This is sort of stupid here, converting to a vec of mutables and back let mut v = items; - std::sort::quick_sort(v, lteq); + do std::sort::quick_sort(v) |ma, mb| { + get_meta_item_name(*ma) <= get_meta_item_name(*mb) + } // There doesn't seem to be a more optimal way to do this do v.map |&m| { @@ -282,14 +278,14 @@ pub fn sort_meta_items(+items: ~[@ast::meta_item]) -> ~[@ast::meta_item] { } } -pub fn remove_meta_items_by_name(items: ~[@ast::meta_item], name: ~str) -> +pub fn remove_meta_items_by_name(items: ~[@ast::meta_item], name: &str) -> ~[@ast::meta_item] { return vec::filter_mapped(items, |item| { - if get_meta_item_name(*item) != name { - option::Some(*item) + if name != *get_meta_item_name(*item) { + Some(*item) } else { - option::None + None } }); } @@ -310,21 +306,21 @@ pub fn find_linkage_metas(attrs: &[ast::attribute]) -> ~[@ast::meta_item] { pub fn foreign_abi(attrs: ~[ast::attribute]) -> Either<~str, ast::foreign_abi> { return match attr::first_attr_value_str_by_name(attrs, ~"abi") { - option::None => { - either::Right(ast::foreign_abi_cdecl) - } - option::Some(~"rust-intrinsic") => { - either::Right(ast::foreign_abi_rust_intrinsic) - } - option::Some(~"cdecl") => { - either::Right(ast::foreign_abi_cdecl) - } - option::Some(~"stdcall") => { - either::Right(ast::foreign_abi_stdcall) - } - option::Some(ref t) => { - either::Left(~"unsupported abi: " + (*t)) - } + None => { + Right(ast::foreign_abi_cdecl) + } + Some(@~"rust-intrinsic") => { + Right(ast::foreign_abi_rust_intrinsic) + } + Some(@~"cdecl") => { + Right(ast::foreign_abi_cdecl) + } + Some(@~"stdcall") => { + Right(ast::foreign_abi_stdcall) + } + Some(t) => { + Left(~"unsupported abi: " + *t) + } }; } @@ -371,9 +367,9 @@ pub fn require_unique_names(diagnostic: span_handler, let name = get_meta_item_name(*meta); // FIXME: How do I silence the warnings? --pcw (#2619) - if !set.insert(copy name) { + if !set.insert(name) { diagnostic.span_fatal(meta.span, - fmt!("duplicate meta item `%s`", name)); + fmt!("duplicate meta item `%s`", *name)); } } } diff --git a/src/libsyntax/ext/auto_encode.rs b/src/libsyntax/ext/auto_encode.rs index 24f5d650d2b..9ceaebe6dd1 100644 --- a/src/libsyntax/ext/auto_encode.rs +++ b/src/libsyntax/ext/auto_encode.rs @@ -114,7 +114,7 @@ pub fn expand_auto_encode( in_items: ~[@ast::item] ) -> ~[@ast::item] { fn is_auto_encode(a: &ast::attribute) -> bool { - attr::get_attr_name(a) == ~"auto_encode" + *attr::get_attr_name(a) == ~"auto_encode" } fn filter_attrs(item: @ast::item) -> @ast::item { @@ -169,7 +169,7 @@ pub fn expand_auto_decode( in_items: ~[@ast::item] ) -> ~[@ast::item] { fn is_auto_decode(a: &ast::attribute) -> bool { - attr::get_attr_name(a) == ~"auto_decode" + *attr::get_attr_name(a) == ~"auto_decode" } fn filter_attrs(item: @ast::item) -> @ast::item { diff --git a/src/libsyntax/ext/expand.rs b/src/libsyntax/ext/expand.rs index 298eed5b735..3cecf857c91 100644 --- a/src/libsyntax/ext/expand.rs +++ b/src/libsyntax/ext/expand.rs @@ -102,11 +102,11 @@ pub fn expand_mod_items(exts: SyntaxExtensions, cx: ext_ctxt, do vec::foldr(item.attrs, ~[*item]) |attr, items| { let mname = attr::get_attr_name(attr); - match exts.find(&mname) { + match exts.find(&*mname) { None | Some(NormalTT(_)) | Some(ItemTT(*)) => items, Some(ItemDecorator(dec_fn)) => { cx.bt_push(ExpandedFrom({call_site: attr.span, - callie: {name: copy mname, + callie: {name: /*bad*/ copy *mname, span: None}})); let r = dec_fn(cx, attr.span, attr.node.value, items); cx.bt_pop(); diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index fa51d4c29d2..a16392e1da2 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -3247,11 +3247,11 @@ pub impl Parser { // on the mod, then we'll go and suck in another file and merge // its contents match ::attr::first_attr_value_str_by_name(outer_attrs, ~"merge") { - Some(ref path) => { + Some(path) => { let prefix = Path( self.sess.cm.span_to_filename(copy self.span)); let prefix = prefix.dir_path(); - let path = Path((*path)); + let path = Path(copy *path); let (new_mod_item, new_attrs) = self.eval_src_mod_from_path( prefix, path, ~[], id_span); @@ -3280,7 +3280,7 @@ pub impl Parser { let file_path = match ::attr::first_attr_value_str_by_name( attrs, ~"path") { - Some(ref d) => (*d), + Some(d) => copy *d, None => copy *default_path }; self.mod_path_stack.push(file_path) @@ -3300,10 +3300,10 @@ pub impl Parser { let default_path = self.sess.interner.get(id) + ~".rs"; let file_path = match ::attr::first_attr_value_str_by_name( outer_attrs, ~"path") { - Some(ref d) => { - let path = Path(*d); + Some(d) => { + let path = Path(copy *d); if !path.is_absolute { - mod_path.push(*d) + mod_path.push(copy *d) } else { path } @@ -3337,7 +3337,7 @@ pub impl Parser { fn cdir_path_opt(default: ~str, attrs: ~[ast::attribute]) -> ~str { match ::attr::first_attr_value_str_by_name(attrs, ~"path") { - Some(ref d) => (*d), + Some(d) => copy *d, None => default } } diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs index 40ba27c495c..a23c55e063b 100644 --- a/src/libsyntax/print/pprust.rs +++ b/src/libsyntax/print/pprust.rs @@ -897,7 +897,7 @@ pub fn print_attribute(s: @ps, attr: ast::attribute) { if attr.node.is_sugared_doc { let meta = attr::attr_meta(attr); let comment = attr::get_meta_item_value_str(meta).get(); - word(s.s, comment); + word(s.s, *comment); } else { word(s.s, ~"#["); print_meta_item(s, @attr.node.value); @@ -1816,14 +1816,14 @@ pub fn print_type_params(s: @ps, &¶ms: ~[ast::ty_param]) { pub fn print_meta_item(s: @ps, &&item: @ast::meta_item) { ibox(s, indent_unit); match item.node { - ast::meta_word(ref name) => word(s.s, (*name)), + ast::meta_word(ref name) => word(s.s, *name), ast::meta_name_value(ref name, value) => { - word_space(s, (*name)); + word_space(s, *name); word_space(s, ~"="); print_literal(s, @value); } ast::meta_list(ref name, ref items) => { - word(s.s, (*name)); + word(s.s, *name); popen(s); commasep( s, -- cgit 1.4.1-3-g733a5 From de5fdaf9349445a98eee0f55d8816b0b6873f5a4 Mon Sep 17 00:00:00 2001 From: Erick Tryzelaar Date: Thu, 14 Feb 2013 07:34:21 -0800 Subject: convert ast::meta_items to take @~strs --- src/librustc/back/link.rs | 12 ++++++------ src/librustc/driver/session.rs | 2 +- src/librustc/front/core_inject.rs | 2 +- src/librustc/front/test.rs | 2 +- src/librustc/metadata/encoder.rs | 14 +++++++------- src/librustc/middle/lang_items.rs | 2 +- src/librustc/middle/lint.rs | 6 +++--- src/librustc/middle/ty.rs | 4 ++-- src/librustpkg/rustpkg.rc | 8 ++++---- src/librustpkg/util.rs | 8 ++++---- src/libsyntax/ast.rs | 6 +++--- src/libsyntax/attr.rs | 18 +++++++++--------- src/libsyntax/ext/pipes/ast_builder.rs | 5 +++-- src/libsyntax/parse/attr.rs | 32 ++++++++++++++++---------------- src/libsyntax/print/pprust.rs | 6 +++--- 15 files changed, 64 insertions(+), 63 deletions(-) (limited to 'src/libsyntax/parse') diff --git a/src/librustc/back/link.rs b/src/librustc/back/link.rs index fefd49d7815..32c88bbbd2e 100644 --- a/src/librustc/back/link.rs +++ b/src/librustc/back/link.rs @@ -499,15 +499,15 @@ pub fn build_link_meta(sess: Session, c: &ast::crate, output: &Path, fn hash(symbol_hasher: &hash::State, m: &@ast::meta_item) { match m.node { - ast::meta_name_value(ref key, value) => { - symbol_hasher.write_str(len_and_str((*key))); + ast::meta_name_value(key, value) => { + symbol_hasher.write_str(len_and_str(*key)); symbol_hasher.write_str(len_and_str_lit(value)); } - ast::meta_word(ref name) => { - symbol_hasher.write_str(len_and_str((*name))); + ast::meta_word(name) => { + symbol_hasher.write_str(len_and_str(*name)); } - ast::meta_list(ref name, ref mis) => { - symbol_hasher.write_str(len_and_str((*name))); + ast::meta_list(name, ref mis) => { + symbol_hasher.write_str(len_and_str(*name)); for mis.each |m_| { hash(symbol_hasher, m_); } diff --git a/src/librustc/driver/session.rs b/src/librustc/driver/session.rs index 4d7f55584bb..49b9f834275 100644 --- a/src/librustc/driver/session.rs +++ b/src/librustc/driver/session.rs @@ -346,7 +346,7 @@ pub mod test { style: ast::attr_outer, value: codemap::respan(codemap::dummy_sp(), ast::meta_name_value( - ~"crate_type", + @~"crate_type", codemap::respan(codemap::dummy_sp(), ast::lit_str(@t)))), is_sugared_doc: false diff --git a/src/librustc/front/core_inject.rs b/src/librustc/front/core_inject.rs index b7f0f5189c6..281d1ea7305 100644 --- a/src/librustc/front/core_inject.rs +++ b/src/librustc/front/core_inject.rs @@ -51,7 +51,7 @@ fn inject_libcore_ref(sess: Session, spanned(ast::attribute_ { style: ast::attr_inner, value: spanned(ast::meta_name_value( - ~"vers", + @~"vers", spanned(ast::lit_str(@CORE_VERSION.to_str())) )), is_sugared_doc: false diff --git a/src/librustc/front/test.rs b/src/librustc/front/test.rs index 9955ef4a8e9..ddd09a8b837 100644 --- a/src/librustc/front/test.rs +++ b/src/librustc/front/test.rs @@ -262,7 +262,7 @@ mod __test { fn mk_std(cx: &TestCtxt) -> @ast::view_item { let vers = ast::lit_str(@~"0.6"); let vers = nospan(vers); - let mi = ast::meta_name_value(~"vers", vers); + let mi = ast::meta_name_value(@~"vers", vers); let mi = nospan(mi); let id_std = cx.sess.ident_of(~"std"); let vi = if is_std(cx) { diff --git a/src/librustc/metadata/encoder.rs b/src/librustc/metadata/encoder.rs index cf27c6e65f6..2956b0579f5 100644 --- a/src/librustc/metadata/encoder.rs +++ b/src/librustc/metadata/encoder.rs @@ -1017,19 +1017,19 @@ fn write_int(writer: io::Writer, &&n: int) { fn encode_meta_item(ebml_w: writer::Encoder, mi: meta_item) { match mi.node { - meta_word(ref name) => { + meta_word(name) => { ebml_w.start_tag(tag_meta_item_word); ebml_w.start_tag(tag_meta_item_name); - ebml_w.writer.write(str::to_bytes((*name))); + ebml_w.writer.write(str::to_bytes(*name)); ebml_w.end_tag(); ebml_w.end_tag(); } - meta_name_value(ref name, value) => { + meta_name_value(name, value) => { match value.node { lit_str(value) => { ebml_w.start_tag(tag_meta_item_name_value); ebml_w.start_tag(tag_meta_item_name); - ebml_w.writer.write(str::to_bytes((*name))); + ebml_w.writer.write(str::to_bytes(*name)); ebml_w.end_tag(); ebml_w.start_tag(tag_meta_item_value); ebml_w.writer.write(str::to_bytes(*value)); @@ -1039,10 +1039,10 @@ fn encode_meta_item(ebml_w: writer::Encoder, mi: meta_item) { _ => {/* FIXME (#623): encode other variants */ } } } - meta_list(ref name, ref items) => { + meta_list(name, ref items) => { ebml_w.start_tag(tag_meta_item_list); ebml_w.start_tag(tag_meta_item_name); - ebml_w.writer.write(str::to_bytes((*name))); + ebml_w.writer.write(str::to_bytes(*name)); ebml_w.end_tag(); for items.each |inner_item| { encode_meta_item(ebml_w, **inner_item); @@ -1127,7 +1127,7 @@ fn encode_crate_deps(ecx: @encode_ctxt, let mut deps = ~[]; do cstore::iter_crate_data(cstore) |key, val| { let dep = {cnum: key, - name: ecx.tcx.sess.ident_of(/*bad*/copy val.name), + name: ecx.tcx.sess.ident_of(/*bad*/ copy val.name), vers: decoder::get_crate_vers(val.data), hash: decoder::get_crate_hash(val.data)}; deps.push(dep); diff --git a/src/librustc/middle/lang_items.rs b/src/librustc/middle/lang_items.rs index 6bcc71514d4..7bb2e7e4c16 100644 --- a/src/librustc/middle/lang_items.rs +++ b/src/librustc/middle/lang_items.rs @@ -321,7 +321,7 @@ impl LanguageItemCollector { match literal.node { lit_str(value) => { self.match_and_collect_item(item_def_id, - (/*bad*/copy *key), + (/*bad*/copy **key), /*bad*/copy *value); } _ => {} // Skip. diff --git a/src/librustc/middle/lint.rs b/src/librustc/middle/lint.rs index 6e5146818b0..ea9cb579753 100644 --- a/src/librustc/middle/lint.rs +++ b/src/librustc/middle/lint.rs @@ -346,13 +346,13 @@ impl ctxt { for triples.each |pair| { let (meta, level, lintname) = /*bad*/copy *pair; - match self.dict.find(&lintname) { + match self.dict.find(&*lintname) { None => { self.span_lint( new_ctxt.get_level(unrecognized_lint), meta.span, fmt!("unknown `%s` attribute: `%s`", - level_to_str(level), lintname)); + level_to_str(level), *lintname)); } Some(lint) => { @@ -363,7 +363,7 @@ impl ctxt { meta.span, fmt!("%s(%s) overruled by outer forbid(%s)", level_to_str(level), - lintname, lintname)); + *lintname, *lintname)); } // we do multiple unneeded copies of the diff --git a/src/librustc/middle/ty.rs b/src/librustc/middle/ty.rs index c15010d7b7b..3dfe1289519 100644 --- a/src/librustc/middle/ty.rs +++ b/src/librustc/middle/ty.rs @@ -783,11 +783,11 @@ pub fn mk_ctxt(s: session::Session, let mut legacy_records = false; for crate.node.attrs.each |attribute| { match attribute.node.value.node { - ast::meta_word(ref w) if (*w) == ~"legacy_modes" => { + ast::meta_word(w) if *w == ~"legacy_modes" => { legacy_modes = true; if legacy_records { break; } } - ast::meta_word(ref w) if (*w) == ~"legacy_records" => { + ast::meta_word(w) if *w == ~"legacy_records" => { legacy_records = true; if legacy_modes { break; } } diff --git a/src/librustpkg/rustpkg.rc b/src/librustpkg/rustpkg.rc index 5b610bbb1f8..98ce4052eeb 100644 --- a/src/librustpkg/rustpkg.rc +++ b/src/librustpkg/rustpkg.rc @@ -89,7 +89,7 @@ impl PackageScript { ast::meta_name_value(v, spanned { node: ast::lit_str(s), span: _}) => { - match v { + match *v { ~"id" => id = Some(*s), ~"vers" => vers = Some(*s), _ => () @@ -112,7 +112,7 @@ impl PackageScript { ast::meta_name_value(v, spanned { node: ast::lit_str(s), span: _}) => { - match v { + match *v { ~"url" => url = Some(*s), ~"target" => target = Some(*s), _ => () @@ -133,7 +133,7 @@ impl PackageScript { ast::meta_name_value(v, spanned { node: ast::lit_str(s), span: _}) => { - match v { + match *v { ~"file" => file = Some(*s), _ => () } @@ -148,7 +148,7 @@ impl PackageScript { for crate.node.attrs.each |a| { match a.node.value.node { ast::meta_list(v, mis) => { - match v { + match *v { ~"pkg" => { let (i, v) = load_pkg_attr(mis); diff --git a/src/librustpkg/util.rs b/src/librustpkg/util.rs index f2b1e41bbd1..7f7b3e75b6f 100644 --- a/src/librustpkg/util.rs +++ b/src/librustpkg/util.rs @@ -110,7 +110,7 @@ fn fold_item(ctx: @ReadyCtx, item: @ast::item, ast::meta_list(_, mis) => { for mis.each |mi| { match mi.node { - ast::meta_word(cmd) => cmds.push(cmd), + ast::meta_word(cmd) => cmds.push(copy *cmd), _ => {} }; } @@ -639,7 +639,7 @@ pub fn compile_input(sysroot: Option, input: driver::input, dir: &Path, match a.node { ast::meta_name_value(v, spanned {node: ast::lit_str(s), span: _}) => { - match v { + match *v { ~"name" => name = Some(*s), ~"vers" => vers = Some(*s), ~"uuid" => uuid = Some(*s), @@ -657,13 +657,13 @@ pub fn compile_input(sysroot: Option, input: driver::input, dir: &Path, match a.node.value.node { ast::meta_name_value(v, spanned {node: ast::lit_str(s), span: _}) => { - match v { + match *v { ~"crate_type" => crate_type = Some(*s), _ => {} } } ast::meta_list(v, mis) => { - match v { + match *v { ~"link" => { let (n, v, u) = load_link_attr(mis); diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index bf64402d237..234cef5f6eb 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -173,9 +173,9 @@ pub type meta_item = spanned; #[auto_decode] #[deriving_eq] pub enum meta_item_ { - meta_word(~str), - meta_list(~str, ~[@meta_item]), - meta_name_value(~str, lit), + meta_word(@~str), + meta_list(@~str, ~[@meta_item]), + meta_name_value(@~str, lit), } pub type blk = spanned; diff --git a/src/libsyntax/attr.rs b/src/libsyntax/attr.rs index bbe18a7fcc0..14ffb1cab5d 100644 --- a/src/libsyntax/attr.rs +++ b/src/libsyntax/attr.rs @@ -37,16 +37,16 @@ pub fn mk_name_value_item_str(name: @~str, value: @~str) pub fn mk_name_value_item(name: @~str, +value: ast::lit) -> @ast::meta_item { - @dummy_spanned(ast::meta_name_value(/*bad*/ copy *name, value)) + @dummy_spanned(ast::meta_name_value(name, value)) } pub fn mk_list_item(name: @~str, +items: ~[@ast::meta_item]) -> @ast::meta_item { - @dummy_spanned(ast::meta_list(/*bad*/ copy *name, items)) + @dummy_spanned(ast::meta_list(name, items)) } pub fn mk_word_item(name: @~str) -> @ast::meta_item { - @dummy_spanned(ast::meta_word(/*bad*/ copy *name)) + @dummy_spanned(ast::meta_word(name)) } pub fn mk_attr(item: @ast::meta_item) -> ast::attribute { @@ -60,7 +60,7 @@ pub fn mk_sugared_doc_attr(text: ~str, let lit = spanned(lo, hi, ast::lit_str(@text)); let attr = ast::attribute_ { style: doc_comment_style(text), - value: spanned(lo, hi, ast::meta_name_value(~"doc", lit)), + value: spanned(lo, hi, ast::meta_name_value(@~"doc", lit)), is_sugared_doc: true }; spanned(lo, hi, attr) @@ -96,9 +96,9 @@ pub pure fn get_attr_name(attr: &ast::attribute) -> @~str { pub pure fn get_meta_item_name(meta: @ast::meta_item) -> @~str { match meta.node { - ast::meta_word(ref n) => @/*bad*/ copy *n, - ast::meta_name_value(ref n, _) => @/*bad*/ copy *n, - ast::meta_list(ref n, _) => @/*bad*/ copy *n, + ast::meta_word(n) => n, + ast::meta_name_value(n, _) => n, + ast::meta_list(n, _) => n, } } @@ -343,8 +343,8 @@ pub fn find_inline_attr(attrs: &[ast::attribute]) -> inline_attr { // FIXME (#2809)---validate the usage of #[inline] and #[inline(always)] do vec::foldl(ia_none, attrs) |ia,attr| { match attr.node.value.node { - ast::meta_word(~"inline") => ia_hint, - ast::meta_list(~"inline", items) => { + ast::meta_word(@~"inline") => ia_hint, + ast::meta_list(@~"inline", items) => { if !vec::is_empty(find_meta_items_by_name(items, ~"always")) { ia_always } else if !vec::is_empty( diff --git a/src/libsyntax/ext/pipes/ast_builder.rs b/src/libsyntax/ext/pipes/ast_builder.rs index 6c461738798..f4d0e57c595 100644 --- a/src/libsyntax/ext/pipes/ast_builder.rs +++ b/src/libsyntax/ext/pipes/ast_builder.rs @@ -228,9 +228,10 @@ pub impl ext_ctxt_ast_builder for ext_ctxt { let non_camel_case_attribute = respan(dummy_sp(), ast::attribute_ { style: ast::attr_outer, value: respan(dummy_sp(), - ast::meta_list(~"allow", ~[ + ast::meta_list(@~"allow", ~[ @respan(dummy_sp(), - ast::meta_word(~"non_camel_case_types")) + ast::meta_word( + @~"non_camel_case_types")) ])), is_sugared_doc: false }); diff --git a/src/libsyntax/parse/attr.rs b/src/libsyntax/parse/attr.rs index e297e33d825..34ac5c16841 100644 --- a/src/libsyntax/parse/attr.rs +++ b/src/libsyntax/parse/attr.rs @@ -126,23 +126,23 @@ impl parser_attr for Parser { fn parse_meta_item() -> @ast::meta_item { let lo = self.span.lo; - let name = *self.id_to_str(self.parse_ident()); + let name = self.id_to_str(self.parse_ident()); match self.token { - token::EQ => { - self.bump(); - let lit = self.parse_lit(); - let mut hi = self.span.hi; - 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)); - } - _ => { - let mut hi = self.span.hi; - return @spanned(lo, hi, ast::meta_word(name)); - } + token::EQ => { + self.bump(); + let lit = self.parse_lit(); + let mut hi = self.span.hi; + @spanned(lo, hi, ast::meta_name_value(name, lit)) + } + token::LPAREN => { + let inner_items = self.parse_meta_seq(); + let mut hi = self.span.hi; + @spanned(lo, hi, ast::meta_list(name, inner_items)) + } + _ => { + let mut hi = self.span.hi; + @spanned(lo, hi, ast::meta_word(name)) + } } } diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs index a23c55e063b..6fea6fd82bb 100644 --- a/src/libsyntax/print/pprust.rs +++ b/src/libsyntax/print/pprust.rs @@ -1816,13 +1816,13 @@ pub fn print_type_params(s: @ps, &¶ms: ~[ast::ty_param]) { pub fn print_meta_item(s: @ps, &&item: @ast::meta_item) { ibox(s, indent_unit); match item.node { - ast::meta_word(ref name) => word(s.s, *name), - ast::meta_name_value(ref name, value) => { + ast::meta_word(name) => word(s.s, *name), + ast::meta_name_value(name, value) => { word_space(s, *name); word_space(s, ~"="); print_literal(s, @value); } - ast::meta_list(ref name, ref items) => { + ast::meta_list(name, ref items) => { word(s.s, *name); popen(s); commasep( -- cgit 1.4.1-3-g733a5