From 27ea11eda820a8bb5b552c4fb37668bcec2df914 Mon Sep 17 00:00:00 2001 From: Luqman Aden Date: Tue, 11 Nov 2014 20:22:41 -0500 Subject: librustc: Allow linkage attribute on any statics, not just foreign statics. --- src/libsyntax/feature_gate.rs | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/libsyntax') diff --git a/src/libsyntax/feature_gate.rs b/src/libsyntax/feature_gate.rs index c38fea9b3d5..98c49c00205 100644 --- a/src/libsyntax/feature_gate.rs +++ b/src/libsyntax/feature_gate.rs @@ -181,6 +181,10 @@ impl<'a, 'v> Visitor<'v> for Context<'a> { "`#[thread_local]` is an experimental feature, and does not \ currently handle destructors. There is no corresponding \ `#[task_local]` mapping to the task model"); + } else if attr.name().equiv(&("linkage")) { + self.gate_feature("linkage", i.span, + "the `linkage` attribute is experimental \ + and not portable across platforms") } } match i.node { -- cgit 1.4.1-3-g733a5 From 8000482e86808f7e36b8d7e595cea7c712d09a6c Mon Sep 17 00:00:00 2001 From: Tom Jakubowski Date: Sun, 16 Nov 2014 18:13:21 -0800 Subject: Disallow parsing of struct variants with 0 fields Make struct variant syntax more consistent with struct syntax and fix an assert in middle::typeck. Fix #19003 --- src/libsyntax/parse/parser.rs | 10 +++++++++- src/test/compile-fail/struct-variant-no-fields.rs | 13 +++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 src/test/compile-fail/struct-variant-no-fields.rs (limited to 'src/libsyntax') diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 50e3483fb15..44b7cc8d181 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -5175,7 +5175,15 @@ impl<'a> Parser<'a> { if self.eat(&token::OpenDelim(token::Brace)) { // Parse a struct variant. all_nullary = false; - kind = StructVariantKind(self.parse_struct_def()); + let start_span = self.span; + let struct_def = self.parse_struct_def(); + if struct_def.fields.len() == 0 { + self.span_err(start_span, + format!("unit-like struct variant should be written \ + without braces, as `{},`", + token::get_ident(ident)).as_slice()); + } + kind = StructVariantKind(struct_def); } else if self.token == token::OpenDelim(token::Paren) { all_nullary = false; let arg_tys = self.parse_enum_variant_seq( diff --git a/src/test/compile-fail/struct-variant-no-fields.rs b/src/test/compile-fail/struct-variant-no-fields.rs new file mode 100644 index 00000000000..41dbbeefc0a --- /dev/null +++ b/src/test/compile-fail/struct-variant-no-fields.rs @@ -0,0 +1,13 @@ +// Copyright 2014 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +enum Foo { + Bar {} //~ ERROR unit-like struct variant should be written without braces, as `Bar,` +} -- cgit 1.4.1-3-g733a5 From 8c467f75e3d36d6eb7ee12f4ae2827e711724a50 Mon Sep 17 00:00:00 2001 From: Alexis Beingessner Date: Sun, 16 Nov 2014 23:01:37 -0500 Subject: slightly better deprecation message for fn syntax --- src/libsyntax/parse/parser.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/libsyntax') diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 50e3483fb15..bc6bdec8aec 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -1229,7 +1229,8 @@ impl<'a> Parser<'a> { { if self.eat(&token::Lt) { if lifetime_defs.is_empty() { - self.warn("deprecated syntax, use `for` keyword now"); + self.warn("deprecated syntax; use the `for` keyword now \ + (e.g. change `fn<'a>` to `for<'a> fn`)"); let lifetime_defs = self.parse_lifetime_defs(); self.expect_gt(); lifetime_defs -- cgit 1.4.1-3-g733a5 From 197a0ac481ae6d154c0966b21849432f1b32c28f Mon Sep 17 00:00:00 2001 From: Andrew Cann Date: Mon, 17 Nov 2014 17:35:18 +0800 Subject: change return type of slice_shift_char `slice_shift_char` splits a `str` into it's leading `char` and the remainder of the `str`. Currently, it returns a `(Option, &str)` such that: "bar".slice_shift_char() => (Some('b'), "ar") "ar".slice_shift_char() => (Some('a'), "r") "r".slice_shift_char() => (Some('r'), "") "".slice_shift_char() => (None, "") This is a little odd. Either a `str` can be split into both a head and a tail or it cannot. So the return type should be `Option<(char, &str)>`. With the current behaviour, in the case of the empty string, the `str` returned is meaningless - it is always the empty string. This commit changes slice_shift_char so that: "bar".slice_shift_char() => Some(('b', "ar")) "ar".slice_shift_char() => Some(('a', "r")) "r".slice_shift_char() => Some(('r', "")) "".slice_shift_char() => None [breaking-change] --- src/libcollections/str.rs | 4 ++-- src/libcore/num/mod.rs | 22 +++++++++++----------- src/libcore/str.rs | 18 +++++++++--------- src/libsyntax/ext/asm.rs | 4 ++-- src/libsyntax/print/pprust.rs | 2 +- 5 files changed, 25 insertions(+), 25 deletions(-) (limited to 'src/libsyntax') diff --git a/src/libcollections/str.rs b/src/libcollections/str.rs index a2f89dfecbc..45e08fed8b2 100644 --- a/src/libcollections/str.rs +++ b/src/libcollections/str.rs @@ -1254,13 +1254,13 @@ mod tests { #[test] fn test_slice_shift_char() { let data = "ประเทศไทย中"; - assert_eq!(data.slice_shift_char(), (Some('ป'), "ระเทศไทย中")); + assert_eq!(data.slice_shift_char(), Some(('ป', "ระเทศไทย中"))); } #[test] fn test_slice_shift_char_2() { let empty = ""; - assert_eq!(empty.slice_shift_char(), (None, "")); + assert_eq!(empty.slice_shift_char(), None); } #[test] diff --git a/src/libcore/num/mod.rs b/src/libcore/num/mod.rs index f5505ff8e76..cf07db97c8c 100644 --- a/src/libcore/num/mod.rs +++ b/src/libcore/num/mod.rs @@ -1455,10 +1455,10 @@ macro_rules! from_str_radix_float_impl { } let (is_positive, src) = match src.slice_shift_char() { - (None, _) => return None, - (Some('-'), "") => return None, - (Some('-'), src) => (false, src), - (Some(_), _) => (true, src), + None => return None, + Some(('-', "")) => return None, + Some(('-', src)) => (false, src), + Some((_, _)) => (true, src), }; // The significand to accumulate @@ -1561,10 +1561,10 @@ macro_rules! from_str_radix_float_impl { // Parse the exponent as decimal integer let src = src[offset..]; let (is_positive, exp) = match src.slice_shift_char() { - (Some('-'), src) => (false, from_str::(src)), - (Some('+'), src) => (true, from_str::(src)), - (Some(_), _) => (true, from_str::(src)), - (None, _) => return None, + Some(('-', src)) => (false, from_str::(src)), + Some(('+', src)) => (true, from_str::(src)), + Some((_, _)) => (true, from_str::(src)), + None => return None, }; match (is_positive, exp) { @@ -1604,7 +1604,7 @@ macro_rules! from_str_radix_int_impl { let is_signed_ty = (0 as $T) > Int::min_value(); match src.slice_shift_char() { - (Some('-'), src) if is_signed_ty => { + Some(('-', src)) if is_signed_ty => { // The number is negative let mut result = 0; for c in src.chars() { @@ -1623,7 +1623,7 @@ macro_rules! from_str_radix_int_impl { } Some(result) }, - (Some(_), _) => { + Some((_, _)) => { // The number is signed let mut result = 0; for c in src.chars() { @@ -1642,7 +1642,7 @@ macro_rules! from_str_radix_int_impl { } Some(result) }, - (None, _) => None, + None => None, } } } diff --git a/src/libcore/str.rs b/src/libcore/str.rs index ab4e50c58d9..4d62c76a544 100644 --- a/src/libcore/str.rs +++ b/src/libcore/str.rs @@ -1808,21 +1808,21 @@ pub trait StrPrelude for Sized? { /// it. This does not allocate a new string; instead, it returns a /// slice that point one character beyond the character that was /// shifted. If the string does not contain any characters, - /// a tuple of None and an empty string is returned instead. + /// None is returned instead. /// /// # Example /// /// ```rust /// let s = "Löwe 老虎 Léopard"; - /// let (c, s1) = s.slice_shift_char(); - /// assert_eq!(c, Some('L')); + /// let (c, s1) = s.slice_shift_char().unwrap(); + /// assert_eq!(c, 'L'); /// assert_eq!(s1, "öwe 老虎 Léopard"); /// - /// let (c, s2) = s1.slice_shift_char(); - /// assert_eq!(c, Some('ö')); + /// let (c, s2) = s1.slice_shift_char().unwrap(); + /// assert_eq!(c, 'ö'); /// assert_eq!(s2, "we 老虎 Léopard"); /// ``` - fn slice_shift_char<'a>(&'a self) -> (Option, &'a str); + fn slice_shift_char<'a>(&'a self) -> Option<(char, &'a str)>; /// Returns the byte offset of an inner slice relative to an enclosing outer slice. /// @@ -2194,13 +2194,13 @@ impl StrPrelude for str { } #[inline] - fn slice_shift_char(&self) -> (Option, &str) { + fn slice_shift_char(&self) -> Option<(char, &str)> { if self.is_empty() { - return (None, self); + None } else { let CharRange {ch, next} = self.char_range_at(0u); let next_s = unsafe { raw::slice_bytes(self, next, self.len()) }; - return (Some(ch), next_s); + Some((ch, next_s)) } } diff --git a/src/libsyntax/ext/asm.rs b/src/libsyntax/ext/asm.rs index d57d6e52d7f..dc9e62cabff 100644 --- a/src/libsyntax/ext/asm.rs +++ b/src/libsyntax/ext/asm.rs @@ -96,8 +96,8 @@ pub fn expand_asm<'cx>(cx: &'cx mut ExtCtxt, sp: Span, tts: &[ast::TokenTree]) // cannot be shared with any other operand (usually when // a register is clobbered early.) let output = match constraint.get().slice_shift_char() { - (Some('='), _) => None, - (Some('+'), operand) => { + Some(('=', _)) => None, + Some(('+', operand)) => { Some(token::intern_and_get_ident(format!( "={}", operand).as_slice())) diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs index 7025555ab40..a78b7b10de8 100644 --- a/src/libsyntax/print/pprust.rs +++ b/src/libsyntax/print/pprust.rs @@ -1853,7 +1853,7 @@ impl<'a> State<'a> { try!(self.commasep(Inconsistent, a.outputs.as_slice(), |s, &(ref co, ref o, is_rw)| { match co.get().slice_shift_char() { - (Some('='), operand) if is_rw => { + Some(('=', operand)) if is_rw => { try!(s.print_string(format!("+{}", operand).as_slice(), ast::CookedStr)) } -- cgit 1.4.1-3-g733a5 From 7213de1c49e448c7c6ad2d30dc3e6b3a13e090df Mon Sep 17 00:00:00 2001 From: Aaron Turon Date: Wed, 12 Nov 2014 15:51:51 -0800 Subject: Fallout from deprecation This commit handles the fallout from deprecating `_with` and `_equiv` methods. --- src/grammar/verify.rs | 2 +- src/libcollections/tree/mod.rs | 2 +- src/libcollections/trie/mod.rs | 2 +- src/libregex/re.rs | 2 +- src/librustc/lint/context.rs | 8 ++++---- src/librustc/metadata/creader.rs | 2 +- src/librustc/metadata/decoder.rs | 3 +-- src/librustc/metadata/filesearch.rs | 6 +++--- src/librustc/metadata/loader.rs | 2 +- src/librustc/middle/lang_items.rs | 2 +- src/librustc/middle/trans/base.rs | 6 +++--- src/librustc/middle/trans/debuginfo.rs | 2 +- src/librustc/middle/trans/type_.rs | 2 +- src/librustdoc/html/render.rs | 2 +- src/libserialize/json.rs | 4 ++-- src/libstd/collections/hash/map.rs | 8 ++++---- src/libsyntax/diagnostics/registry.rs | 2 +- src/libsyntax/ext/format.rs | 6 +++--- src/libsyntax/util/interner.rs | 20 ++++++++++++++------ src/libterm/terminfo/mod.rs | 20 ++++++++++---------- src/test/bench/shootout-k-nucleotide-pipes.rs | 2 +- 21 files changed, 56 insertions(+), 49 deletions(-) (limited to 'src/libsyntax') diff --git a/src/grammar/verify.rs b/src/grammar/verify.rs index a4641c40165..159a62f0110 100644 --- a/src/grammar/verify.rs +++ b/src/grammar/verify.rs @@ -178,7 +178,7 @@ fn parse_antlr_token(s: &str, tokens: &HashMap) -> TokenAndSpan { let toknum = m.name("toknum"); let content = m.name("content"); - let proto_tok = tokens.find_equiv(&toknum).expect(format!("didn't find token {} in the map", + let proto_tok = tokens.get(&toknum).expect(format!("didn't find token {} in the map", toknum).as_slice()); let nm = parse::token::intern(content); diff --git a/src/libcollections/tree/mod.rs b/src/libcollections/tree/mod.rs index ac8279c92fe..20823a2affc 100644 --- a/src/libcollections/tree/mod.rs +++ b/src/libcollections/tree/mod.rs @@ -33,4 +33,4 @@ //! ``` pub mod map; -pub mod set; \ No newline at end of file +pub mod set; diff --git a/src/libcollections/trie/mod.rs b/src/libcollections/trie/mod.rs index f0f8f00a6a0..9dcb182cd26 100644 --- a/src/libcollections/trie/mod.rs +++ b/src/libcollections/trie/mod.rs @@ -17,4 +17,4 @@ //! `TrieMap` is ordered. pub mod map; -pub mod set; \ No newline at end of file +pub mod set; diff --git a/src/libregex/re.rs b/src/libregex/re.rs index dbdb2718744..e1e2abcb1b7 100644 --- a/src/libregex/re.rs +++ b/src/libregex/re.rs @@ -726,7 +726,7 @@ impl<'t> Captures<'t> { match self.named { None => "", Some(ref h) => { - match h.find_equiv(name) { + match h.get(name) { None => "", Some(i) => self.at(*i), } diff --git a/src/librustc/lint/context.rs b/src/librustc/lint/context.rs index 85cc413a1b8..aa6a021a210 100644 --- a/src/librustc/lint/context.rs +++ b/src/librustc/lint/context.rs @@ -165,7 +165,7 @@ impl LintStore { } fn register_renamed(&mut self, old_name: &str, new_name: &str) { - let target = match self.by_name.find_equiv(new_name) { + let target = match self.by_name.get(new_name) { Some(&Id(lint_id)) => lint_id.clone(), _ => panic!("invalid lint renaming of {} to {}", old_name, new_name) }; @@ -259,7 +259,7 @@ impl LintStore { fn find_lint(&self, lint_name: &str, sess: &Session, span: Option) -> Option { - match self.by_name.find_equiv(lint_name) { + match self.by_name.get(lint_name) { Some(&Id(lint_id)) => Some(lint_id), Some(&Renamed(ref new_name, lint_id)) => { let warning = format!("lint {} has been renamed to {}", @@ -282,7 +282,7 @@ impl LintStore { match self.lint_groups.iter().map(|(&x, pair)| (x, pair.ref0().clone())) .collect::>>() - .find_equiv(lint_name.as_slice()) { + .get(lint_name.as_slice()) { Some(v) => { v.iter() .map(|lint_id: &LintId| @@ -489,7 +489,7 @@ impl<'a, 'tcx> Context<'a, 'tcx> { match self.lints.find_lint(lint_name.get(), &self.tcx.sess, Some(span)) { Some(lint_id) => vec![(lint_id, level, span)], None => { - match self.lints.lint_groups.find_equiv(lint_name.get()) { + match self.lints.lint_groups.get(lint_name.get()) { Some(&(ref v, _)) => v.iter() .map(|lint_id: &LintId| (*lint_id, level, span)) diff --git a/src/librustc/metadata/creader.rs b/src/librustc/metadata/creader.rs index dbf0e405408..1cfe565fd7d 100644 --- a/src/librustc/metadata/creader.rs +++ b/src/librustc/metadata/creader.rs @@ -321,7 +321,7 @@ fn existing_match(e: &Env, name: &str, // `source` stores paths which are normalized which may be different // from the strings on the command line. let source = e.sess.cstore.get_used_crate_source(cnum).unwrap(); - match e.sess.opts.externs.find_equiv(name) { + match e.sess.opts.externs.get(name) { Some(locs) => { let found = locs.iter().any(|l| { let l = fs::realpath(&Path::new(l.as_slice())).ok(); diff --git a/src/librustc/metadata/decoder.rs b/src/librustc/metadata/decoder.rs index 2af1f12a2cd..e0110a81c17 100644 --- a/src/librustc/metadata/decoder.rs +++ b/src/librustc/metadata/decoder.rs @@ -298,7 +298,7 @@ fn item_path(item_doc: rbml::Doc) -> Vec { fn item_name(intr: &IdentInterner, item: rbml::Doc) -> ast::Name { let name = reader::get_doc(item, tag_paths_data_name); let string = name.as_str_slice(); - match intr.find_equiv(string) { + match intr.find(string) { None => token::intern(string), Some(val) => val, } @@ -1449,4 +1449,3 @@ pub fn is_associated_type(cdata: Cmd, id: ast::NodeId) -> bool { Some(item) => item_sort(item) == 't', } } - diff --git a/src/librustc/metadata/filesearch.rs b/src/librustc/metadata/filesearch.rs index aeed829f805..f7d666e4815 100644 --- a/src/librustc/metadata/filesearch.rs +++ b/src/librustc/metadata/filesearch.rs @@ -54,7 +54,7 @@ impl<'a> FileSearch<'a> { debug!("filesearch: searching lib path"); let tlib_path = make_target_lib_path(self.sysroot, self.triple); - if !visited_dirs.contains_equiv(tlib_path.as_vec()) { + if !visited_dirs.contains(tlib_path.as_vec()) { match f(&tlib_path) { FileMatches => found = true, FileDoesntMatch => () @@ -69,9 +69,9 @@ impl<'a> FileSearch<'a> { let tlib_path = make_rustpkg_lib_path( self.sysroot, path, self.triple); debug!("is {} in visited_dirs? {}", tlib_path.display(), - visited_dirs.contains_equiv(&tlib_path.as_vec().to_vec())); + visited_dirs.contains(&tlib_path.as_vec().to_vec())); - if !visited_dirs.contains_equiv(tlib_path.as_vec()) { + if !visited_dirs.contains(tlib_path.as_vec()) { visited_dirs.insert(tlib_path.as_vec().to_vec()); // Don't keep searching the RUST_PATH if one match turns up -- // if we did, we'd get a "multiple matching crates" error diff --git a/src/librustc/metadata/loader.rs b/src/librustc/metadata/loader.rs index c3d92a19a20..30bef248b47 100644 --- a/src/librustc/metadata/loader.rs +++ b/src/librustc/metadata/loader.rs @@ -596,7 +596,7 @@ impl<'a> Context<'a> { } fn find_commandline_library(&mut self) -> Option { - let locs = match self.sess.opts.externs.find_equiv(self.crate_name) { + let locs = match self.sess.opts.externs.get(self.crate_name) { Some(s) => s, None => return None, }; diff --git a/src/librustc/middle/lang_items.rs b/src/librustc/middle/lang_items.rs index 4fe770a1e0f..ffc8a83e42e 100644 --- a/src/librustc/middle/lang_items.rs +++ b/src/librustc/middle/lang_items.rs @@ -132,7 +132,7 @@ impl<'a, 'v> Visitor<'v> for LanguageItemCollector<'a> { fn visit_item(&mut self, item: &ast::Item) { match extract(item.attrs.as_slice()) { Some(value) => { - let item_index = self.item_refs.find_equiv(&value).map(|x| *x); + let item_index = self.item_refs.get(value.get()).map(|x| *x); match item_index { Some(item_index) => { diff --git a/src/librustc/middle/trans/base.rs b/src/librustc/middle/trans/base.rs index b267d1d7f3e..cc51be31760 100644 --- a/src/librustc/middle/trans/base.rs +++ b/src/librustc/middle/trans/base.rs @@ -216,7 +216,7 @@ pub fn get_extern_fn(ccx: &CrateContext, ty: Type, output: ty::t) -> ValueRef { - match externs.find_equiv(name) { + match externs.get(name) { Some(n) => return *n, None => {} } @@ -226,7 +226,7 @@ pub fn get_extern_fn(ccx: &CrateContext, } fn get_extern_rust_fn(ccx: &CrateContext, fn_ty: ty::t, name: &str, did: ast::DefId) -> ValueRef { - match ccx.externs().borrow().find_equiv(name) { + match ccx.externs().borrow().get(name) { Some(n) => return *n, None => () } @@ -2983,7 +2983,7 @@ fn internalize_symbols(cx: &SharedCrateContext, reachable: &HashSet) { let name = CString::new(llvm::LLVMGetValueName(val), false); if !declared.contains(&name) && - !reachable.contains_equiv(name.as_str().unwrap()) { + !reachable.contains(name.as_str().unwrap()) { llvm::SetLinkage(val, llvm::InternalLinkage); } } diff --git a/src/librustc/middle/trans/debuginfo.rs b/src/librustc/middle/trans/debuginfo.rs index eaff757679a..de8e80b0275 100644 --- a/src/librustc/middle/trans/debuginfo.rs +++ b/src/librustc/middle/trans/debuginfo.rs @@ -1677,7 +1677,7 @@ fn declare_local(bcx: Block, } fn file_metadata(cx: &CrateContext, full_path: &str) -> DIFile { - match debug_context(cx).created_files.borrow().find_equiv(full_path) { + match debug_context(cx).created_files.borrow().get(full_path) { Some(file_metadata) => return *file_metadata, None => () } diff --git a/src/librustc/middle/trans/type_.rs b/src/librustc/middle/trans/type_.rs index d6a2d0c86a1..69861290b8d 100644 --- a/src/librustc/middle/trans/type_.rs +++ b/src/librustc/middle/trans/type_.rs @@ -336,7 +336,7 @@ impl TypeNames { } pub fn find_type(&self, s: &str) -> Option { - self.named_types.borrow().find_equiv(s).map(|x| Type::from_ref(*x)) + self.named_types.borrow().get(s).map(|x| Type::from_ref(*x)) } pub fn type_to_string(&self, ty: Type) -> String { diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs index 1dd65148169..8e9ac7095da 100644 --- a/src/librustdoc/html/render.rs +++ b/src/librustdoc/html/render.rs @@ -2122,7 +2122,7 @@ impl<'a> fmt::Show for Sidebar<'a> { fn block(w: &mut fmt::Formatter, short: &str, longty: &str, cur: &clean::Item, cx: &Context) -> fmt::Result { - let items = match cx.sidebar.find_equiv(short) { + let items = match cx.sidebar.get(short) { Some(items) => items.as_slice(), None => return Ok(()) }; diff --git a/src/libserialize/json.rs b/src/libserialize/json.rs index 80238f6df41..03e0452a415 100644 --- a/src/libserialize/json.rs +++ b/src/libserialize/json.rs @@ -901,7 +901,7 @@ impl Json { /// Otherwise, returns None. pub fn find<'a>(&'a self, key: &str) -> Option<&'a Json>{ match self { - &Object(ref map) => map.find_with(|s| key.cmp(s.as_slice())), + &Object(ref map) => map.get(key), _ => None } } @@ -926,7 +926,7 @@ impl Json { pub fn search<'a>(&'a self, key: &str) -> Option<&'a Json> { match self { &Object(ref map) => { - match map.find_with(|s| key.cmp(s.as_slice())) { + match map.get(key) { Some(json_value) => Some(json_value), None => { for (_, v) in map.iter() { diff --git a/src/libstd/collections/hash/map.rs b/src/libstd/collections/hash/map.rs index 2eee6976339..69375e8d4f8 100644 --- a/src/libstd/collections/hash/map.rs +++ b/src/libstd/collections/hash/map.rs @@ -1944,11 +1944,11 @@ mod test_map { m.insert("baz".to_string(), baz); - assert_eq!(m.find_equiv("foo"), Some(&foo)); - assert_eq!(m.find_equiv("bar"), Some(&bar)); - assert_eq!(m.find_equiv("baz"), Some(&baz)); + assert_eq!(m.get("foo"), Some(&foo)); + assert_eq!(m.get("bar"), Some(&bar)); + assert_eq!(m.get("baz"), Some(&baz)); - assert_eq!(m.find_equiv("qux"), None); + assert_eq!(m.get("qux"), None); } #[test] diff --git a/src/libsyntax/diagnostics/registry.rs b/src/libsyntax/diagnostics/registry.rs index 71d82a41f38..4caef247aeb 100644 --- a/src/libsyntax/diagnostics/registry.rs +++ b/src/libsyntax/diagnostics/registry.rs @@ -20,6 +20,6 @@ impl Registry { } pub fn find_description(&self, code: &str) -> Option<&'static str> { - self.descriptions.find_equiv(code).map(|desc| *desc) + self.descriptions.get(code).map(|desc| *desc) } } diff --git a/src/libsyntax/ext/format.rs b/src/libsyntax/ext/format.rs index 9a9724de8fb..f1b92b4d6bc 100644 --- a/src/libsyntax/ext/format.rs +++ b/src/libsyntax/ext/format.rs @@ -144,7 +144,7 @@ fn parse_args(ecx: &mut ExtCtxt, sp: Span, allow_method: bool, let name = interned_name.get(); p.expect(&token::Eq); let e = p.parse_expr(); - match names.find_equiv(name) { + match names.get(name) { None => {} Some(prev) => { ecx.span_err(e.span, @@ -366,7 +366,7 @@ impl<'a, 'b> Context<'a, 'b> { self.ecx.expr_path(path) } parse::CountIsName(n) => { - let i = match self.name_positions.find_equiv(n) { + let i = match self.name_positions.get(n) { Some(&i) => i, None => 0, // error already emitted elsewhere }; @@ -410,7 +410,7 @@ impl<'a, 'b> Context<'a, 'b> { // Named arguments are converted to positional arguments at // the end of the list of arguments parse::ArgumentNamed(n) => { - let i = match self.name_positions.find_equiv(n) { + let i = match self.name_positions.get(n) { Some(&i) => i, None => 0, // error already emitted elsewhere }; diff --git a/src/libsyntax/util/interner.rs b/src/libsyntax/util/interner.rs index 08ada3e4435..ede967bba25 100644 --- a/src/libsyntax/util/interner.rs +++ b/src/libsyntax/util/interner.rs @@ -14,9 +14,9 @@ use ast::Name; +use std::borrow::BorrowFrom; use std::collections::HashMap; use std::cell::RefCell; -use std::cmp::Equiv; use std::fmt; use std::hash::Hash; use std::rc::Rc; @@ -75,9 +75,10 @@ impl Interner { (*vect).len() } - pub fn find_equiv>(&self, val: &Q) -> Option { + pub fn find(&self, val: &Q) -> Option + where Q: BorrowFrom + Eq + Hash { let map = self.map.borrow(); - match (*map).find_equiv(val) { + match (*map).get(val) { Some(v) => Some(*v), None => None, } @@ -117,6 +118,12 @@ impl fmt::Show for RcStr { } } +impl BorrowFrom for str { + fn borrow_from(owned: &RcStr) -> &str { + owned.string.as_slice() + } +} + impl RcStr { pub fn new(string: &str) -> RcStr { RcStr { @@ -149,7 +156,7 @@ impl StrInterner { pub fn intern(&self, val: &str) -> Name { let mut map = self.map.borrow_mut(); - match map.find_equiv(val) { + match map.get(val) { Some(&idx) => return idx, None => (), } @@ -195,8 +202,9 @@ impl StrInterner { self.vect.borrow().len() } - pub fn find_equiv>(&self, val: &Q) -> Option { - match (*self.map.borrow()).find_equiv(val) { + pub fn find(&self, val: &Q) -> Option + where Q: BorrowFrom + Eq + Hash { + match (*self.map.borrow()).get(val) { Some(v) => Some(*v), None => None, } diff --git a/src/libterm/terminfo/mod.rs b/src/libterm/terminfo/mod.rs index 0b5092a64d0..c1393767c8a 100644 --- a/src/libterm/terminfo/mod.rs +++ b/src/libterm/terminfo/mod.rs @@ -78,7 +78,7 @@ impl Terminal for TerminfoTerminal { if self.num_colors > color { let s = expand(self.ti .strings - .find_equiv("setaf") + .get("setaf") .unwrap() .as_slice(), &[Number(color as int)], &mut Variables::new()); @@ -95,7 +95,7 @@ impl Terminal for TerminfoTerminal { if self.num_colors > color { let s = expand(self.ti .strings - .find_equiv("setab") + .get("setab") .unwrap() .as_slice(), &[Number(color as int)], &mut Variables::new()); @@ -113,7 +113,7 @@ impl Terminal for TerminfoTerminal { attr::BackgroundColor(c) => self.bg(c), _ => { let cap = cap_for_attr(attr); - let parm = self.ti.strings.find_equiv(cap); + let parm = self.ti.strings.get(cap); if parm.is_some() { let s = expand(parm.unwrap().as_slice(), &[], @@ -135,19 +135,19 @@ impl Terminal for TerminfoTerminal { } _ => { let cap = cap_for_attr(attr); - self.ti.strings.find_equiv(cap).is_some() + self.ti.strings.get(cap).is_some() } } } fn reset(&mut self) -> IoResult<()> { - let mut cap = self.ti.strings.find_equiv("sgr0"); + let mut cap = self.ti.strings.get("sgr0"); if cap.is_none() { // are there any terminals that have color/attrs and not sgr0? // Try falling back to sgr, then op - cap = self.ti.strings.find_equiv("sgr"); + cap = self.ti.strings.get("sgr"); if cap.is_none() { - cap = self.ti.strings.find_equiv("op"); + cap = self.ti.strings.get("op"); } } let s = cap.map_or(Err("can't find terminfo capability `sgr0`".to_string()), |op| { @@ -202,9 +202,9 @@ impl TerminfoTerminal { } let inf = ti.unwrap(); - let nc = if inf.strings.find_equiv("setaf").is_some() - && inf.strings.find_equiv("setab").is_some() { - inf.numbers.find_equiv("colors").map_or(0, |&n| n) + let nc = if inf.strings.get("setaf").is_some() + && inf.strings.get("setab").is_some() { + inf.numbers.get("colors").map_or(0, |&n| n) } else { 0 }; return Some(box TerminfoTerminal {out: out, diff --git a/src/test/bench/shootout-k-nucleotide-pipes.rs b/src/test/bench/shootout-k-nucleotide-pipes.rs index e40c477ec66..e39cd743ad5 100644 --- a/src/test/bench/shootout-k-nucleotide-pipes.rs +++ b/src/test/bench/shootout-k-nucleotide-pipes.rs @@ -76,7 +76,7 @@ fn sort_and_fmt(mm: &HashMap , uint>, total: uint) -> String { // given a map, search for the frequency of a pattern fn find(mm: &HashMap , uint>, key: String) -> uint { let key = key.into_ascii().as_slice().to_lowercase().into_string(); - match mm.find_equiv(key.as_bytes()) { + match mm.get(key.as_bytes()) { option::None => { return 0u; } option::Some(&num) => { return num; } } -- cgit 1.4.1-3-g733a5