@@ -1328,7 +1328,10 @@ impl<'a, K: 'a, V: 'a> Iterator for IterMut<'a, K, V> {
1328
1328
None
1329
1329
} else {
1330
1330
self . length -= 1 ;
1331
- unsafe { Some ( self . range . next_unchecked ( ) ) }
1331
+ unsafe {
1332
+ let ( k, v) = self . range . next_unchecked ( ) ;
1333
+ Some ( ( k, v) ) // coerce k from `&mut K` to `&K`
1334
+ }
1332
1335
}
1333
1336
}
1334
1337
@@ -1707,7 +1710,14 @@ impl<'a, K, V> Iterator for RangeMut<'a, K, V> {
1707
1710
type Item = ( & ' a K , & ' a mut V ) ;
1708
1711
1709
1712
fn next ( & mut self ) -> Option < ( & ' a K , & ' a mut V ) > {
1710
- if self . front == self . back { None } else { unsafe { Some ( self . next_unchecked ( ) ) } }
1713
+ if self . front == self . back {
1714
+ None
1715
+ } else {
1716
+ unsafe {
1717
+ let ( k, v) = self . next_unchecked ( ) ;
1718
+ Some ( ( k, v) ) // coerce k from `&mut K` to `&K`
1719
+ }
1720
+ }
1711
1721
}
1712
1722
1713
1723
fn last ( mut self ) -> Option < ( & ' a K , & ' a mut V ) > {
@@ -1716,16 +1726,15 @@ impl<'a, K, V> Iterator for RangeMut<'a, K, V> {
1716
1726
}
1717
1727
1718
1728
impl < ' a , K , V > RangeMut < ' a , K , V > {
1719
- unsafe fn next_unchecked ( & mut self ) -> ( & ' a K , & ' a mut V ) {
1729
+ unsafe fn next_unchecked ( & mut self ) -> ( & ' a mut K , & ' a mut V ) {
1720
1730
let handle = ptr:: read ( & self . front ) ;
1721
1731
1722
1732
let mut cur_handle = match handle. right_kv ( ) {
1723
1733
Ok ( kv) => {
1724
1734
self . front = ptr:: read ( & kv) . right_edge ( ) ;
1725
1735
// Doing the descend invalidates the references returned by `into_kv_mut`,
1726
1736
// so we have to do this last.
1727
- let ( k, v) = kv. into_kv_mut ( ) ;
1728
- return ( k, v) ; // coerce k from `&mut K` to `&K`
1737
+ return kv. into_kv_mut ( ) ;
1729
1738
}
1730
1739
Err ( last_edge) => {
1731
1740
let next_level = last_edge. into_node ( ) . ascend ( ) . ok ( ) ;
@@ -1739,8 +1748,7 @@ impl<'a, K, V> RangeMut<'a, K, V> {
1739
1748
self . front = first_leaf_edge ( ptr:: read ( & kv) . right_edge ( ) . descend ( ) ) ;
1740
1749
// Doing the descend invalidates the references returned by `into_kv_mut`,
1741
1750
// so we have to do this last.
1742
- let ( k, v) = kv. into_kv_mut ( ) ;
1743
- return ( k, v) ; // coerce k from `&mut K` to `&K`
1751
+ return kv. into_kv_mut ( ) ;
1744
1752
}
1745
1753
Err ( last_edge) => {
1746
1754
let next_level = last_edge. into_node ( ) . ascend ( ) . ok ( ) ;
0 commit comments