@@ -176,17 +176,18 @@ impl BList {
176176 let mut lefts_rev = lefts. into_iter ( ) . rev ( ) ;
177177
178178 // Add excess new nodes at the tail of render order (rightmost first
179- // for the NodeWriter, then extended in render order ).
180- let mut excess : Vec < BNode > = Vec :: new ( ) ;
179+ // for the NodeWriter).
180+ let excess_start = rights . len ( ) ;
181181 for l in lefts_rev
182182 . by_ref ( )
183183 . take ( left_len. saturating_sub ( paired_count) )
184184 {
185185 let ( next_writer, el) = writer. add ( l) ;
186- excess . push ( el) ;
186+ rights . push ( el) ;
187187 writer = next_writer;
188188 }
189- rights. extend ( excess. into_iter ( ) . rev ( ) ) ;
189+ // Items were pushed right-to-left; flip to render order.
190+ rights[ excess_start..] . reverse ( ) ;
190191
191192 // Patch paired nodes right-to-left.
192193 for ( l, r) in lefts_rev. zip ( rights[ ..paired_count] . iter_mut ( ) . rev ( ) ) {
@@ -409,13 +410,11 @@ impl BList {
409410 } ;
410411 replacements. push ( bundle) ;
411412 }
412- // drop the splice iterator and immediately replace the range with the reordered elements.
413- // replacements was built right-to-left; iterate in reverse for render order.
413+ // drop the splice iterator and immediately replace the range with the reordered elements
414414 drop ( spliced_middle) ;
415- bundles. splice (
416- matching_len_start..matching_len_start,
417- replacements. into_iter ( ) . rev ( ) ,
418- ) ;
415+ // replacements was built right-to-left; reverse to render order
416+ replacements. reverse ( ) ;
417+ bundles. splice ( matching_len_start..matching_len_start, replacements) ;
419418
420419 // Step 2.3. Remove any extra rights
421420 for KeyedEntry ( _, r) in spare_bundles. drain ( ) {
0 commit comments