default => or_insert per RFC
This commit is contained in:
parent
93cdf1f278
commit
1b98f6da7a
16 changed files with 31 additions and 34 deletions
|
@ -1146,7 +1146,7 @@ impl<'a, K: Ord, V> Entry<'a, K, V> {
|
||||||
#[unstable(feature = "std_misc",
|
#[unstable(feature = "std_misc",
|
||||||
reason = "will soon be replaced by or_insert")]
|
reason = "will soon be replaced by or_insert")]
|
||||||
#[deprecated(since = "1.0",
|
#[deprecated(since = "1.0",
|
||||||
reason = "replaced with more ergonomic `default` and `default_with`")]
|
reason = "replaced with more ergonomic `or_insert` and `or_insert_with`")]
|
||||||
/// Returns a mutable reference to the entry if occupied, or the VacantEntry if vacant
|
/// Returns a mutable reference to the entry if occupied, or the VacantEntry if vacant
|
||||||
pub fn get(self) -> Result<&'a mut V, VacantEntry<'a, K, V>> {
|
pub fn get(self) -> Result<&'a mut V, VacantEntry<'a, K, V>> {
|
||||||
match self {
|
match self {
|
||||||
|
@ -1159,7 +1159,7 @@ impl<'a, K: Ord, V> Entry<'a, K, V> {
|
||||||
reason = "matches entry v3 specification, waiting for dust to settle")]
|
reason = "matches entry v3 specification, waiting for dust to settle")]
|
||||||
/// Ensures a value is in the entry by inserting the default if empty, and returns
|
/// Ensures a value is in the entry by inserting the default if empty, and returns
|
||||||
/// a mutable reference to the value in the entry.
|
/// a mutable reference to the value in the entry.
|
||||||
pub fn default(self, default: V) -> &'a mut V {
|
pub fn or_insert(self, default: V) -> &'a mut V {
|
||||||
match self {
|
match self {
|
||||||
Occupied(entry) => entry.into_mut(),
|
Occupied(entry) => entry.into_mut(),
|
||||||
Vacant(entry) => entry.insert(default),
|
Vacant(entry) => entry.insert(default),
|
||||||
|
@ -1170,7 +1170,7 @@ impl<'a, K: Ord, V> Entry<'a, K, V> {
|
||||||
reason = "matches entry v3 specification, waiting for dust to settle")]
|
reason = "matches entry v3 specification, waiting for dust to settle")]
|
||||||
/// Ensures a value is in the entry by inserting the result of the default function if empty,
|
/// Ensures a value is in the entry by inserting the result of the default function if empty,
|
||||||
/// and returns a mutable reference to the value in the entry.
|
/// and returns a mutable reference to the value in the entry.
|
||||||
pub fn default_with<F: FnOnce() -> V>(self, default: F) -> &'a mut V {
|
pub fn or_insert_with<F: FnOnce() -> V>(self, default: F) -> &'a mut V {
|
||||||
match self {
|
match self {
|
||||||
Occupied(entry) => entry.into_mut(),
|
Occupied(entry) => entry.into_mut(),
|
||||||
Vacant(entry) => entry.insert(default()),
|
Vacant(entry) => entry.insert(default()),
|
||||||
|
@ -1592,7 +1592,7 @@ impl<K: Ord, V> BTreeMap<K, V> {
|
||||||
///
|
///
|
||||||
/// // count the number of occurrences of letters in the vec
|
/// // count the number of occurrences of letters in the vec
|
||||||
/// for x in vec!["a","b","a","c","a","b"] {
|
/// for x in vec!["a","b","a","c","a","b"] {
|
||||||
/// *count.entry(x).default(0) += 1;
|
/// *count.entry(x).or_insert(0) += 1;
|
||||||
/// }
|
/// }
|
||||||
///
|
///
|
||||||
/// assert_eq!(count["a"], 3);
|
/// assert_eq!(count["a"], 3);
|
||||||
|
|
|
@ -637,7 +637,7 @@ impl<V> VecMap<V> {
|
||||||
///
|
///
|
||||||
/// // count the number of occurrences of numbers in the vec
|
/// // count the number of occurrences of numbers in the vec
|
||||||
/// for x in vec![1, 2, 1, 2, 3, 4, 1, 2, 4] {
|
/// for x in vec![1, 2, 1, 2, 3, 4, 1, 2, 4] {
|
||||||
/// *count.entry(x).default(0) += 1;
|
/// *count.entry(x).or_insert(0) += 1;
|
||||||
/// }
|
/// }
|
||||||
///
|
///
|
||||||
/// assert_eq!(count[1], 3);
|
/// assert_eq!(count[1], 3);
|
||||||
|
@ -667,7 +667,7 @@ impl<'a, V> Entry<'a, V> {
|
||||||
#[unstable(feature = "collections",
|
#[unstable(feature = "collections",
|
||||||
reason = "will soon be replaced by or_insert")]
|
reason = "will soon be replaced by or_insert")]
|
||||||
#[deprecated(since = "1.0",
|
#[deprecated(since = "1.0",
|
||||||
reason = "replaced with more ergonomic `default` and `default_with`")]
|
reason = "replaced with more ergonomic `or_insert` and `or_insert_with`")]
|
||||||
/// Returns a mutable reference to the entry if occupied, or the VacantEntry if vacant
|
/// Returns a mutable reference to the entry if occupied, or the VacantEntry if vacant
|
||||||
pub fn get(self) -> Result<&'a mut V, VacantEntry<'a, V>> {
|
pub fn get(self) -> Result<&'a mut V, VacantEntry<'a, V>> {
|
||||||
match self {
|
match self {
|
||||||
|
@ -680,7 +680,7 @@ impl<'a, V> Entry<'a, V> {
|
||||||
reason = "matches entry v3 specification, waiting for dust to settle")]
|
reason = "matches entry v3 specification, waiting for dust to settle")]
|
||||||
/// Ensures a value is in the entry by inserting the default if empty, and returns
|
/// Ensures a value is in the entry by inserting the default if empty, and returns
|
||||||
/// a mutable reference to the value in the entry.
|
/// a mutable reference to the value in the entry.
|
||||||
pub fn default(self, default: V) -> &'a mut V {
|
pub fn or_insert(self, default: V) -> &'a mut V {
|
||||||
match self {
|
match self {
|
||||||
Occupied(entry) => entry.into_mut(),
|
Occupied(entry) => entry.into_mut(),
|
||||||
Vacant(entry) => entry.insert(default),
|
Vacant(entry) => entry.insert(default),
|
||||||
|
@ -691,7 +691,7 @@ impl<'a, V> Entry<'a, V> {
|
||||||
reason = "matches entry v3 specification, waiting for dust to settle")]
|
reason = "matches entry v3 specification, waiting for dust to settle")]
|
||||||
/// Ensures a value is in the entry by inserting the result of the default function if empty,
|
/// Ensures a value is in the entry by inserting the result of the default function if empty,
|
||||||
/// and returns a mutable reference to the value in the entry.
|
/// and returns a mutable reference to the value in the entry.
|
||||||
pub fn default_with<F: FnOnce() -> V>(self, default: F) -> &'a mut V {
|
pub fn or_insert_with<F: FnOnce() -> V>(self, default: F) -> &'a mut V {
|
||||||
match self {
|
match self {
|
||||||
Occupied(entry) => entry.into_mut(),
|
Occupied(entry) => entry.into_mut(),
|
||||||
Vacant(entry) => entry.insert(default()),
|
Vacant(entry) => entry.insert(default()),
|
||||||
|
|
|
@ -426,7 +426,8 @@ impl<'a> Context<'a> {
|
||||||
info!("lib candidate: {}", path.display());
|
info!("lib candidate: {}", path.display());
|
||||||
|
|
||||||
let hash_str = hash.to_string();
|
let hash_str = hash.to_string();
|
||||||
let slot = candidates.entry(hash_str).default_with(|| (HashMap::new(), HashMap::new()));
|
let slot = candidates.entry(hash_str)
|
||||||
|
.or_insert_with(|| (HashMap::new(), HashMap::new()));
|
||||||
let (ref mut rlibs, ref mut dylibs) = *slot;
|
let (ref mut rlibs, ref mut dylibs) = *slot;
|
||||||
if rlib {
|
if rlib {
|
||||||
rlibs.insert(fs::realpath(path).unwrap(), kind);
|
rlibs.insert(fs::realpath(path).unwrap(), kind);
|
||||||
|
|
|
@ -160,7 +160,7 @@ fn build_nodeid_to_index(decl: Option<&ast::FnDecl>,
|
||||||
|
|
||||||
cfg.graph.each_node(|node_idx, node| {
|
cfg.graph.each_node(|node_idx, node| {
|
||||||
if let cfg::CFGNodeData::AST(id) = node.data {
|
if let cfg::CFGNodeData::AST(id) = node.data {
|
||||||
index.entry(id).default(vec![]).push(node_idx);
|
index.entry(id).or_insert(vec![]).push(node_idx);
|
||||||
}
|
}
|
||||||
true
|
true
|
||||||
});
|
});
|
||||||
|
@ -180,7 +180,7 @@ fn build_nodeid_to_index(decl: Option<&ast::FnDecl>,
|
||||||
visit::walk_fn_decl(&mut formals, decl);
|
visit::walk_fn_decl(&mut formals, decl);
|
||||||
impl<'a, 'v> visit::Visitor<'v> for Formals<'a> {
|
impl<'a, 'v> visit::Visitor<'v> for Formals<'a> {
|
||||||
fn visit_pat(&mut self, p: &ast::Pat) {
|
fn visit_pat(&mut self, p: &ast::Pat) {
|
||||||
self.index.entry(p.id).default(vec![]).push(self.entry);
|
self.index.entry(p.id).or_insert(vec![]).push(self.entry);
|
||||||
visit::walk_pat(self, p)
|
visit::walk_pat(self, p)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -436,7 +436,7 @@ fn register_region_obligation<'tcx>(tcx: &ty::ctxt<'tcx>,
|
||||||
debug!("register_region_obligation({})",
|
debug!("register_region_obligation({})",
|
||||||
region_obligation.repr(tcx));
|
region_obligation.repr(tcx));
|
||||||
|
|
||||||
region_obligations.entry(region_obligation.cause.body_id).default(vec![])
|
region_obligations.entry(region_obligation.cause.body_id).or_insert(vec![])
|
||||||
.push(region_obligation);
|
.push(region_obligation);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -5669,7 +5669,7 @@ pub fn lookup_field_type<'tcx>(tcx: &ctxt<'tcx>,
|
||||||
node_id_to_type(tcx, id.node)
|
node_id_to_type(tcx, id.node)
|
||||||
} else {
|
} else {
|
||||||
let mut tcache = tcx.tcache.borrow_mut();
|
let mut tcache = tcx.tcache.borrow_mut();
|
||||||
tcache.entry(id).default_with(|| csearch::get_field_type(tcx, struct_id, id)).ty
|
tcache.entry(id).or_insert_with(|| csearch::get_field_type(tcx, struct_id, id)).ty
|
||||||
};
|
};
|
||||||
ty.subst(tcx, substs)
|
ty.subst(tcx, substs)
|
||||||
}
|
}
|
||||||
|
@ -6817,7 +6817,7 @@ pub fn replace_late_bound_regions<'tcx, T, F>(
|
||||||
debug!("region={}", region.repr(tcx));
|
debug!("region={}", region.repr(tcx));
|
||||||
match region {
|
match region {
|
||||||
ty::ReLateBound(debruijn, br) if debruijn.depth == current_depth => {
|
ty::ReLateBound(debruijn, br) if debruijn.depth == current_depth => {
|
||||||
let region = *map.entry(br).default_with(|| mapf(br));
|
let region = *map.entry(br).or_insert_with(|| mapf(br));
|
||||||
|
|
||||||
if let ty::ReLateBound(debruijn1, br) = region {
|
if let ty::ReLateBound(debruijn1, br) = region {
|
||||||
// If the callback returns a late-bound region,
|
// If the callback returns a late-bound region,
|
||||||
|
|
|
@ -1036,7 +1036,7 @@ pub fn build_session_options(matches: &getopts::Matches) -> Options {
|
||||||
None => early_error("--extern value must be of the format `foo=bar`"),
|
None => early_error("--extern value must be of the format `foo=bar`"),
|
||||||
};
|
};
|
||||||
|
|
||||||
externs.entry(name.to_string()).default(vec![]).push(location.to_string());
|
externs.entry(name.to_string()).or_insert(vec![]).push(location.to_string());
|
||||||
}
|
}
|
||||||
|
|
||||||
let crate_name = matches.opt_str("crate-name");
|
let crate_name = matches.opt_str("crate-name");
|
||||||
|
|
|
@ -26,7 +26,6 @@
|
||||||
#![feature(rustc_diagnostic_macros)]
|
#![feature(rustc_diagnostic_macros)]
|
||||||
#![feature(rustc_private)]
|
#![feature(rustc_private)]
|
||||||
#![feature(staged_api)]
|
#![feature(staged_api)]
|
||||||
#![feature(std_misc)]
|
|
||||||
|
|
||||||
#[macro_use] extern crate log;
|
#[macro_use] extern crate log;
|
||||||
#[macro_use] extern crate syntax;
|
#[macro_use] extern crate syntax;
|
||||||
|
|
|
@ -836,11 +836,8 @@ impl<'a, 'b:'a, 'tcx:'b> ImportResolver<'a, 'b, 'tcx> {
|
||||||
let is_public = import_directive.is_public;
|
let is_public = import_directive.is_public;
|
||||||
|
|
||||||
let mut import_resolutions = module_.import_resolutions.borrow_mut();
|
let mut import_resolutions = module_.import_resolutions.borrow_mut();
|
||||||
let dest_import_resolution = import_resolutions.entry(name).get().unwrap_or_else(
|
let dest_import_resolution = import_resolutions.entry(name)
|
||||||
|vacant_entry| {
|
.or_insert_with(|| ImportResolution::new(id, is_public));
|
||||||
// Create a new import resolution from this child.
|
|
||||||
vacant_entry.insert(ImportResolution::new(id, is_public))
|
|
||||||
});
|
|
||||||
|
|
||||||
debug!("(resolving glob import) writing resolution `{}` in `{}` \
|
debug!("(resolving glob import) writing resolution `{}` in `{}` \
|
||||||
to `{}`",
|
to `{}`",
|
||||||
|
|
|
@ -1361,7 +1361,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||||
closure_def_id: ast::DefId,
|
closure_def_id: ast::DefId,
|
||||||
r: DeferredCallResolutionHandler<'tcx>) {
|
r: DeferredCallResolutionHandler<'tcx>) {
|
||||||
let mut deferred_call_resolutions = self.inh.deferred_call_resolutions.borrow_mut();
|
let mut deferred_call_resolutions = self.inh.deferred_call_resolutions.borrow_mut();
|
||||||
deferred_call_resolutions.entry(closure_def_id).default(vec![]).push(r);
|
deferred_call_resolutions.entry(closure_def_id).or_insert(vec![]).push(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn remove_deferred_call_resolutions(&self,
|
fn remove_deferred_call_resolutions(&self,
|
||||||
|
|
|
@ -876,7 +876,7 @@ impl DocFolder for Cache {
|
||||||
if let clean::ImplItem(ref i) = item.inner {
|
if let clean::ImplItem(ref i) = item.inner {
|
||||||
match i.trait_ {
|
match i.trait_ {
|
||||||
Some(clean::ResolvedPath{ did, .. }) => {
|
Some(clean::ResolvedPath{ did, .. }) => {
|
||||||
self.implementors.entry(did).default(vec![]).push(Implementor {
|
self.implementors.entry(did).or_insert(vec![]).push(Implementor {
|
||||||
def_id: item.def_id,
|
def_id: item.def_id,
|
||||||
generics: i.generics.clone(),
|
generics: i.generics.clone(),
|
||||||
trait_: i.trait_.as_ref().unwrap().clone(),
|
trait_: i.trait_.as_ref().unwrap().clone(),
|
||||||
|
@ -1078,7 +1078,7 @@ impl DocFolder for Cache {
|
||||||
};
|
};
|
||||||
|
|
||||||
if let Some(did) = did {
|
if let Some(did) = did {
|
||||||
self.impls.entry(did).default(vec![]).push(Impl {
|
self.impls.entry(did).or_insert(vec![]).push(Impl {
|
||||||
impl_: i,
|
impl_: i,
|
||||||
dox: dox,
|
dox: dox,
|
||||||
stability: item.stability.clone(),
|
stability: item.stability.clone(),
|
||||||
|
@ -1330,7 +1330,7 @@ impl Context {
|
||||||
Some(ref s) => s.to_string(),
|
Some(ref s) => s.to_string(),
|
||||||
};
|
};
|
||||||
let short = short.to_string();
|
let short = short.to_string();
|
||||||
map.entry(short).default(vec![])
|
map.entry(short).or_insert(vec![])
|
||||||
.push((myname, Some(plain_summary_line(item.doc_value()))));
|
.push((myname, Some(plain_summary_line(item.doc_value()))));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -352,7 +352,7 @@ fn parse_externs(matches: &getopts::Matches) -> Result<core::Externs, String> {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
let name = name.to_string();
|
let name = name.to_string();
|
||||||
externs.entry(name).default(vec![]).push(location.to_string());
|
externs.entry(name).or_insert(vec![]).push(location.to_string());
|
||||||
}
|
}
|
||||||
Ok(externs)
|
Ok(externs)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1489,7 +1489,8 @@ impl<'a, K, V> Entry<'a, K, V> {
|
||||||
#[unstable(feature = "std_misc",
|
#[unstable(feature = "std_misc",
|
||||||
reason = "will soon be replaced by or_insert")]
|
reason = "will soon be replaced by or_insert")]
|
||||||
#[deprecated(since = "1.0",
|
#[deprecated(since = "1.0",
|
||||||
reason = "replaced with more ergonomic `default` and `default_with`")]
|
reason = "replaced with more ergonomic `or_insert` and `or_insert_with`")]
|
||||||
|
/// Returns a mutable reference to the entry if occupied, or the VacantEntry if vacant
|
||||||
pub fn get(self) -> Result<&'a mut V, VacantEntry<'a, K, V>> {
|
pub fn get(self) -> Result<&'a mut V, VacantEntry<'a, K, V>> {
|
||||||
match self {
|
match self {
|
||||||
Occupied(entry) => Ok(entry.into_mut()),
|
Occupied(entry) => Ok(entry.into_mut()),
|
||||||
|
@ -1501,7 +1502,7 @@ impl<'a, K, V> Entry<'a, K, V> {
|
||||||
reason = "matches entry v3 specification, waiting for dust to settle")]
|
reason = "matches entry v3 specification, waiting for dust to settle")]
|
||||||
/// Ensures a value is in the entry by inserting the default if empty, and returns
|
/// Ensures a value is in the entry by inserting the default if empty, and returns
|
||||||
/// a mutable reference to the value in the entry.
|
/// a mutable reference to the value in the entry.
|
||||||
pub fn default(self, default: V) -> &'a mut V {
|
pub fn or_insert(self, default: V) -> &'a mut V {
|
||||||
match self {
|
match self {
|
||||||
Occupied(entry) => entry.into_mut(),
|
Occupied(entry) => entry.into_mut(),
|
||||||
Vacant(entry) => entry.insert(default),
|
Vacant(entry) => entry.insert(default),
|
||||||
|
@ -1512,7 +1513,7 @@ impl<'a, K, V> Entry<'a, K, V> {
|
||||||
reason = "matches entry v3 specification, waiting for dust to settle")]
|
reason = "matches entry v3 specification, waiting for dust to settle")]
|
||||||
/// Ensures a value is in the entry by inserting the result of the default function if empty,
|
/// Ensures a value is in the entry by inserting the result of the default function if empty,
|
||||||
/// and returns a mutable reference to the value in the entry.
|
/// and returns a mutable reference to the value in the entry.
|
||||||
pub fn default_with<F: FnOnce() -> V>(self, default: F) -> &'a mut V {
|
pub fn or_insert_with<F: FnOnce() -> V>(self, default: F) -> &'a mut V {
|
||||||
match self {
|
match self {
|
||||||
Occupied(entry) => entry.into_mut(),
|
Occupied(entry) => entry.into_mut(),
|
||||||
Vacant(entry) => entry.insert(default()),
|
Vacant(entry) => entry.insert(default()),
|
||||||
|
|
|
@ -307,7 +307,7 @@
|
||||||
//! let message = "she sells sea shells by the sea shore";
|
//! let message = "she sells sea shells by the sea shore";
|
||||||
//!
|
//!
|
||||||
//! for c in message.chars() {
|
//! for c in message.chars() {
|
||||||
//! *count.entry(c).default(0) += 1;
|
//! *count.entry(c).or_insert(0) += 1;
|
||||||
//! }
|
//! }
|
||||||
//!
|
//!
|
||||||
//! assert_eq!(count.get(&'s'), Some(&8));
|
//! assert_eq!(count.get(&'s'), Some(&8));
|
||||||
|
@ -340,7 +340,7 @@
|
||||||
//! for id in orders.into_iter() {
|
//! for id in orders.into_iter() {
|
||||||
//! // If this is the first time we've seen this customer, initialize them
|
//! // If this is the first time we've seen this customer, initialize them
|
||||||
//! // with no blood alcohol. Otherwise, just retrieve them.
|
//! // with no blood alcohol. Otherwise, just retrieve them.
|
||||||
//! let person = blood_alcohol.entry(id).default(Person{id: id, blood_alcohol: 0.0});
|
//! let person = blood_alcohol.entry(id).or_insert(Person{id: id, blood_alcohol: 0.0});
|
||||||
//!
|
//!
|
||||||
//! // Reduce their blood alcohol level. It takes time to order and drink a beer!
|
//! // Reduce their blood alcohol level. It takes time to order and drink a beer!
|
||||||
//! person.blood_alcohol *= 0.9;
|
//! person.blood_alcohol *= 0.9;
|
||||||
|
|
|
@ -67,7 +67,7 @@ pub fn apply_mark(m: Mrk, ctxt: SyntaxContext) -> SyntaxContext {
|
||||||
fn apply_mark_internal(m: Mrk, ctxt: SyntaxContext, table: &SCTable) -> SyntaxContext {
|
fn apply_mark_internal(m: Mrk, ctxt: SyntaxContext, table: &SCTable) -> SyntaxContext {
|
||||||
let key = (ctxt, m);
|
let key = (ctxt, m);
|
||||||
* table.mark_memo.borrow_mut().entry(key)
|
* table.mark_memo.borrow_mut().entry(key)
|
||||||
.default_with(|| idx_push(&mut *table.table.borrow_mut(), Mark(m, ctxt)))
|
.or_insert_with(|| idx_push(&mut *table.table.borrow_mut(), Mark(m, ctxt)))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Extend a syntax context with a given rename
|
/// Extend a syntax context with a given rename
|
||||||
|
@ -84,7 +84,7 @@ fn apply_rename_internal(id: Ident,
|
||||||
let key = (ctxt, id, to);
|
let key = (ctxt, id, to);
|
||||||
|
|
||||||
* table.rename_memo.borrow_mut().entry(key)
|
* table.rename_memo.borrow_mut().entry(key)
|
||||||
.default_with(|| idx_push(&mut *table.table.borrow_mut(), Rename(id, to, ctxt)))
|
.or_insert_with(|| idx_push(&mut *table.table.borrow_mut(), Rename(id, to, ctxt)))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Apply a list of renamings to a context
|
/// Apply a list of renamings to a context
|
||||||
|
|
|
@ -35,7 +35,6 @@
|
||||||
#![feature(quote, unsafe_destructor)]
|
#![feature(quote, unsafe_destructor)]
|
||||||
#![feature(rustc_private)]
|
#![feature(rustc_private)]
|
||||||
#![feature(staged_api)]
|
#![feature(staged_api)]
|
||||||
#![feature(std_misc)]
|
|
||||||
#![feature(unicode)]
|
#![feature(unicode)]
|
||||||
#![feature(path_ext)]
|
#![feature(path_ext)]
|
||||||
#![feature(str_char)]
|
#![feature(str_char)]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue