Rollup merge of #23559 - aturon:future-proof-map-index, r=Gankro
This commit removes the `IndexMut` impls on `HashMap` and `BTreeMap`, in order to future-proof the API against the eventual inclusion of an `IndexSet` trait. Ideally, we would eventually be able to support: ```rust map[owned_key] = val; map[borrowed_key].mutating_method(arguments); &mut map[borrowed_key]; ``` but to keep the design space as unconstrained as possible, we do not currently want to support `IndexMut`, in case some other strategy will eventually be needed. Code currently using mutating index notation can use `get_mut` instead. [breaking-change] Closes #23448 r? @Gankro
This commit is contained in:
commit
a91eece96b
@ -24,7 +24,7 @@
|
||||
use core::fmt::Debug;
|
||||
use core::hash::{Hash, Hasher};
|
||||
use core::iter::{Map, FromIterator, IntoIterator};
|
||||
use core::ops::{Index, IndexMut};
|
||||
use core::ops::{Index};
|
||||
use core::{iter, fmt, mem, usize};
|
||||
use Bound::{self, Included, Excluded, Unbounded};
|
||||
|
||||
@ -925,15 +925,6 @@ fn index(&self, key: &Q) -> &V {
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
impl<K: Ord, Q: ?Sized, V> IndexMut<Q> for BTreeMap<K, V>
|
||||
where K: Borrow<Q>, Q: Ord
|
||||
{
|
||||
fn index_mut(&mut self, key: &Q) -> &mut V {
|
||||
self.get_mut(key).expect("no entry found for key")
|
||||
}
|
||||
}
|
||||
|
||||
/// Genericises over how to get the correct type of iterator from the correct type
|
||||
/// of Node ownership.
|
||||
trait Traverse<N> {
|
||||
|
@ -900,7 +900,7 @@ fn record_import_use(&mut self, import_id: NodeId, name: Name) {
|
||||
return;
|
||||
}
|
||||
if self.glob_map.contains_key(&import_id) {
|
||||
self.glob_map[import_id].insert(name);
|
||||
self.glob_map.get_mut(&import_id).unwrap().insert(name);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -603,7 +603,7 @@ fn get_binding(this: &mut Resolver,
|
||||
|
||||
// We've successfully resolved the import. Write the results in.
|
||||
let mut import_resolutions = module_.import_resolutions.borrow_mut();
|
||||
let import_resolution = &mut (*import_resolutions)[target];
|
||||
let import_resolution = import_resolutions.get_mut(&target).unwrap();
|
||||
|
||||
{
|
||||
let mut check_and_write_import = |namespace, result: &_, used_public: &mut bool| {
|
||||
|
@ -380,7 +380,7 @@ fn try_adjust_upvar_deref(&self,
|
||||
// borrow_kind of the upvar to make sure it
|
||||
// is inferred to mutable if necessary
|
||||
let mut upvar_capture_map = self.fcx.inh.upvar_capture_map.borrow_mut();
|
||||
let ub = &mut upvar_capture_map[upvar_id];
|
||||
let ub = upvar_capture_map.get_mut(&upvar_id).unwrap();
|
||||
self.adjust_upvar_borrow_kind(upvar_id, ub, borrow_kind);
|
||||
|
||||
// also need to be in an FnMut closure since this is not an ImmBorrow
|
||||
|
@ -23,7 +23,7 @@
|
||||
use iter::{self, Iterator, ExactSizeIterator, IntoIterator, IteratorExt, FromIterator, Extend, Map};
|
||||
use marker::Sized;
|
||||
use mem::{self, replace};
|
||||
use ops::{Deref, FnMut, Index, IndexMut};
|
||||
use ops::{Deref, FnMut, Index};
|
||||
use option::Option::{self, Some, None};
|
||||
use rand::{self, Rng};
|
||||
use result::Result::{self, Ok, Err};
|
||||
@ -1258,18 +1258,6 @@ fn index<'a>(&'a self, index: &Q) -> &'a V {
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
impl<K, V, S, Q: ?Sized> IndexMut<Q> for HashMap<K, V, S>
|
||||
where K: Eq + Hash + Borrow<Q>,
|
||||
Q: Eq + Hash,
|
||||
S: HashState,
|
||||
{
|
||||
#[inline]
|
||||
fn index_mut<'a>(&'a mut self, index: &Q) -> &'a mut V {
|
||||
self.get_mut(index).expect("no entry found for key")
|
||||
}
|
||||
}
|
||||
|
||||
/// HashMap iterator.
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub struct Iter<'a, K: 'a, V: 'a> {
|
||||
|
Loading…
Reference in New Issue
Block a user