File tree Expand file tree Collapse file tree 1 file changed +4
-10
lines changed Expand file tree Collapse file tree 1 file changed +4
-10
lines changed Original file line number Diff line number Diff line change @@ -417,16 +417,10 @@ impl TokenStream {
417417 mut self ,
418418 mut f : impl FnMut ( usize , TokenTree ) -> TokenTree ,
419419 ) -> TokenStream {
420- if let Some ( inner) = Lrc :: get_mut ( & mut self . 0 ) {
421- // optimization: perform the map in-place if self's reference count is 1
422- let owned = mem:: take ( inner) ;
423- * inner = owned. into_iter ( ) . enumerate ( ) . map ( |( i, tree) | f ( i, tree) ) . collect ( ) ;
424- self
425- } else {
426- TokenStream ( Lrc :: new (
427- self . 0 . iter ( ) . enumerate ( ) . map ( |( i, tree) | f ( i, tree. clone ( ) ) ) . collect ( ) ,
428- ) )
429- }
420+ let owned = Lrc :: make_mut ( & mut self . 0 ) ; // clone if necessary
421+ // rely on vec's in-place optimizations to avoid another allocation
422+ * owned = mem:: take ( owned) . into_iter ( ) . enumerate ( ) . map ( |( i, tree) | f ( i, tree) ) . collect ( ) ;
423+ self
430424 }
431425
432426 /// Create a token stream containing a single token with alone spacing.
You can’t perform that action at this time.
0 commit comments