about summary refs log tree commit diff
diff options
context:
space:
mode:
authorNicholas Nethercote <n.nethercote@gmail.com>2023-07-27 10:50:06 +1000
committerNicholas Nethercote <n.nethercote@gmail.com>2023-07-27 11:58:42 +1000
commit853f453d576ab18e2282b2d8c64cd7e37dd30382 (patch)
tree021fda6bceb1179e9c09231f4257ba13a23e802c
parent55a732461dcd104311b24cc048dcef2ed0c9d57c (diff)
downloadrust-853f453d576ab18e2282b2d8c64cd7e37dd30382.tar.gz
rust-853f453d576ab18e2282b2d8c64cd7e37dd30382.zip
Avoid some token cloning in `filter_tokens_from_list`.
Now the cloning only happens on some paths, instead of all paths.
-rw-r--r--src/librustdoc/clean/mod.rs10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs
index d14953f1bb7..bf6b1184639 100644
--- a/src/librustdoc/clean/mod.rs
+++ b/src/librustdoc/clean/mod.rs
@@ -2347,19 +2347,19 @@ fn get_all_import_attributes<'hir>(
 }
 
 fn filter_tokens_from_list(
-    args_tokens: TokenStream,
+    args_tokens: &TokenStream,
     should_retain: impl Fn(&TokenTree) -> bool,
 ) -> Vec<TokenTree> {
     let mut tokens = Vec::with_capacity(args_tokens.len());
     let mut skip_next_comma = false;
-    for token in args_tokens.into_trees() {
+    for token in args_tokens.trees() {
         match token {
             TokenTree::Token(Token { kind: TokenKind::Comma, .. }, _) if skip_next_comma => {
                 skip_next_comma = false;
             }
-            token if should_retain(&token) => {
+            token if should_retain(token) => {
                 skip_next_comma = false;
-                tokens.push(token);
+                tokens.push(token.clone());
             }
             _ => {
                 skip_next_comma = true;
@@ -2417,7 +2417,7 @@ fn add_without_unwanted_attributes<'hir>(
                     match normal.item.args {
                         ast::AttrArgs::Delimited(ref mut args) => {
                             let tokens =
-                                filter_tokens_from_list(args.tokens.clone(), |token| {
+                                filter_tokens_from_list(&args.tokens, |token| {
                                     !matches!(
                                         token,
                                         TokenTree::Token(