diff --git a/src/librustc/driver/driver.rs b/src/librustc/driver/driver.rs index e091e93f372..8569415e29e 100644 --- a/src/librustc/driver/driver.rs +++ b/src/librustc/driver/driver.rs @@ -62,7 +62,7 @@ pub fn anon_src() -> ~str { ~"" } pub fn source_name(input: input) -> ~str { match input { - file_input(ref ifile) => (*ifile).to_str(), + file_input(ref ifile) => ifile.to_str(), str_input(_) => anon_src() } } @@ -112,9 +112,9 @@ pub fn default_configuration(sess: Session, +argv0: ~str, input: input) -> pub fn append_configuration(+cfg: ast::crate_cfg, +name: ~str) -> ast::crate_cfg { if attr::contains_name(cfg, name) { - return cfg; + cfg } else { - return vec::append_one(cfg, attr::mk_word_item(name)); + vec::append_one(cfg, attr::mk_word_item(name)) } } diff --git a/src/librustc/metadata/encoder.rs b/src/librustc/metadata/encoder.rs index 6267e6be67b..66ccbd97e0d 100644 --- a/src/librustc/metadata/encoder.rs +++ b/src/librustc/metadata/encoder.rs @@ -1124,7 +1124,7 @@ fn encode_crate_deps(ecx: @encode_ctxt, type numdep = decoder::crate_dep; // Pull the cnums and name,vers,hash out of cstore - let mut deps: ~[numdep] = ~[]; + 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), @@ -1134,10 +1134,7 @@ fn encode_crate_deps(ecx: @encode_ctxt, }; // Sort by cnum - pure fn lteq(kv1: &numdep, kv2: &numdep) -> bool { - kv1.cnum <= kv2.cnum - } - std::sort::quick_sort(deps, lteq); + std::sort::quick_sort(deps, |kv1, kv2| kv1.cnum <= kv2.cnum); // Sanity-check the crate numbers let mut expected_cnum = 1; @@ -1147,7 +1144,7 @@ fn encode_crate_deps(ecx: @encode_ctxt, } // mut -> immutable hack for vec::map - return vec::slice(deps, 0u, vec::len(deps)).to_vec(); + deps.slice(0, deps.len()) } // We're just going to write a list of crate 'name-hash-version's, with diff --git a/src/libsyntax/attr.rs b/src/libsyntax/attr.rs index c50c6ddc210..8ba232a5aa9 100644 --- a/src/libsyntax/attr.rs +++ b/src/libsyntax/attr.rs @@ -267,7 +267,7 @@ pub fn sort_meta_items(+items: ~[@ast::meta_item]) -> ~[@ast::meta_item] { } // This is sort of stupid here, converting to a vec of mutables and back - let mut v: ~[@ast::meta_item] = items; + let mut v = items; std::sort::quick_sort(v, lteq); // There doesn't seem to be a more optimal way to do this @@ -371,7 +371,7 @@ 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(name) { + if !set.insert(copy name) { diagnostic.span_fatal(meta.span, fmt!("duplicate meta item `%s`", name)); } diff --git a/src/libsyntax/ext/expand.rs b/src/libsyntax/ext/expand.rs index 85821ae6d82..a8d8205d79e 100644 --- a/src/libsyntax/ext/expand.rs +++ b/src/libsyntax/ext/expand.rs @@ -13,6 +13,7 @@ use core::prelude::*; use ast::{crate, expr_, expr_mac, mac_invoc_tt}; use ast::{tt_delim, tt_tok, item_mac, stmt_, stmt_mac, stmt_expr, stmt_semi}; use ast; +use attr; use codemap::{span, ExpandedFrom}; use ext::base::*; use fold::*; @@ -99,11 +100,8 @@ pub fn expand_mod_items(exts: HashMap<~str, SyntaxExtension>, cx: ext_ctxt, // the item into a new set of items. let new_items = do vec::flat_map(module_.items) |item| { do vec::foldr(item.attrs, ~[*item]) |attr, items| { - let mname = match attr.node.value.node { - ast::meta_word(ref n) => (*n), - ast::meta_name_value(ref n, _) => (*n), - ast::meta_list(ref n, _) => (*n) - }; + let mname = attr::get_attr_name(attr); + match exts.find(&mname) { None | Some(NormalTT(_)) | Some(ItemTT(*)) => items, Some(ItemDecorator(dec_fn)) => {