File tree Expand file tree Collapse file tree 1 file changed +7
-14
lines changed
Expand file tree Collapse file tree 1 file changed +7
-14
lines changed Original file line number Diff line number Diff line change @@ -600,22 +600,15 @@ impl<T: Clone> Dict<T> {
600600 }
601601
602602 pub fn pop_back ( & self ) -> Option < ( PyObjectRef , T ) > {
603- let mut inner = self . write ( ) ;
604- let mut idx = inner. next_new_entry_idx . checked_sub ( 1 ) ?;
605- let entry = loop {
606- if let Some ( entry) = inner. entries . get_mut ( idx) {
607- if entry. is_some ( ) {
608- break entry;
609- }
610- }
611- idx = idx. checked_sub ( 1 ) ?;
612- } ;
613-
614- let entry = std:: mem:: take ( entry) . unwrap ( ) ;
615-
603+ let mut inner = & mut * self . write ( ) ;
604+ let ( entry_idx, entry) = inner. entries [ ..inner. next_new_entry_idx ]
605+ . iter_mut ( )
606+ . enumerate ( )
607+ . rev ( )
608+ . find_map ( |( i, entry) | entry. take ( ) . map ( |e| ( i, e) ) ) ?;
616609 inner. used -= 1 ;
617610 inner. indices [ entry. index ] = IndexEntry :: DUMMY ;
618- inner. next_new_entry_idx = idx ;
611+ inner. next_new_entry_idx = entry_idx ;
619612 Some ( ( entry. key , entry. value ) )
620613 }
621614
You can’t perform that action at this time.
0 commit comments