Skip to content

Commit 7916a2c

Browse files
committed
Use Lrc::make_mut instead of Lrc::get_mut
1 parent 14e57d7 commit 7916a2c

File tree

1 file changed

+4
-10
lines changed

1 file changed

+4
-10
lines changed

compiler/rustc_ast/src/tokenstream.rs

+4-10
Original file line numberDiff line numberDiff 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.

0 commit comments

Comments
 (0)