Skip to content

Commit 1f369f8

Browse files
committed
Auto merge of rust-lang#114115 - nnethercote:less-token-tree-cloning, r=petrochenkov
Less `TokenTree` cloning `TokenTreeCursor` has this comment on it: ``` // FIXME: Many uses of this can be replaced with by-reference iterator to avoid clones. ``` This PR completes that FIXME. It doesn't have much perf effect, but at least we now know that. r? `@petrochenkov`
2 parents 08fd164 + e60a9e2 commit 1f369f8

File tree

1 file changed

+14
-14
lines changed

1 file changed

+14
-14
lines changed

Diff for: src/macros.rs

+14-14
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use std::collections::HashMap;
1313
use std::panic::{catch_unwind, AssertUnwindSafe};
1414

1515
use rustc_ast::token::{BinOpToken, Delimiter, Token, TokenKind};
16-
use rustc_ast::tokenstream::{TokenStream, TokenTree, TokenTreeCursor};
16+
use rustc_ast::tokenstream::{RefTokenTreeCursor, TokenStream, TokenTree};
1717
use rustc_ast::{ast, ptr};
1818
use rustc_ast_pretty::pprust;
1919
use rustc_span::{
@@ -394,7 +394,7 @@ pub(crate) fn rewrite_macro_def(
394394
}
395395

396396
let ts = def.body.tokens.clone();
397-
let mut parser = MacroParser::new(ts.into_trees());
397+
let mut parser = MacroParser::new(ts.trees());
398398
let parsed_def = match parser.parse() {
399399
Some(def) => def,
400400
None => return snippet,
@@ -736,9 +736,9 @@ impl MacroArgParser {
736736
self.buf.clear();
737737
}
738738

739-
fn add_meta_variable(&mut self, iter: &mut TokenTreeCursor) -> Option<()> {
739+
fn add_meta_variable(&mut self, iter: &mut RefTokenTreeCursor<'_>) -> Option<()> {
740740
match iter.next() {
741-
Some(TokenTree::Token(
741+
Some(&TokenTree::Token(
742742
Token {
743743
kind: TokenKind::Ident(name, _),
744744
..
@@ -768,7 +768,7 @@ impl MacroArgParser {
768768
&mut self,
769769
inner: Vec<ParsedMacroArg>,
770770
delim: Delimiter,
771-
iter: &mut TokenTreeCursor,
771+
iter: &mut RefTokenTreeCursor<'_>,
772772
) -> Option<()> {
773773
let mut buffer = String::new();
774774
let mut first = true;
@@ -868,11 +868,11 @@ impl MacroArgParser {
868868

869869
/// Returns a collection of parsed macro def's arguments.
870870
fn parse(mut self, tokens: TokenStream) -> Option<Vec<ParsedMacroArg>> {
871-
let mut iter = tokens.into_trees();
871+
let mut iter = tokens.trees();
872872

873873
while let Some(tok) = iter.next() {
874874
match tok {
875-
TokenTree::Token(
875+
&TokenTree::Token(
876876
Token {
877877
kind: TokenKind::Dollar,
878878
span,
@@ -901,7 +901,7 @@ impl MacroArgParser {
901901
self.add_meta_variable(&mut iter)?;
902902
}
903903
TokenTree::Token(ref t, _) => self.update_buffer(t),
904-
TokenTree::Delimited(_delimited_span, delimited, ref tts) => {
904+
&TokenTree::Delimited(_delimited_span, delimited, ref tts) => {
905905
if !self.buf.is_empty() {
906906
if next_space(&self.last_tok.kind) == SpaceState::Always {
907907
self.add_separator();
@@ -1119,12 +1119,12 @@ pub(crate) fn macro_style(mac: &ast::MacCall, context: &RewriteContext<'_>) -> D
11191119

11201120
// A very simple parser that just parses a macros 2.0 definition into its branches.
11211121
// Currently we do not attempt to parse any further than that.
1122-
struct MacroParser {
1123-
toks: TokenTreeCursor,
1122+
struct MacroParser<'a> {
1123+
toks: RefTokenTreeCursor<'a>,
11241124
}
11251125

1126-
impl MacroParser {
1127-
const fn new(toks: TokenTreeCursor) -> Self {
1126+
impl<'a> MacroParser<'a> {
1127+
const fn new(toks: RefTokenTreeCursor<'a>) -> Self {
11281128
Self { toks }
11291129
}
11301130

@@ -1143,9 +1143,9 @@ impl MacroParser {
11431143
let tok = self.toks.next()?;
11441144
let (lo, args_paren_kind) = match tok {
11451145
TokenTree::Token(..) => return None,
1146-
TokenTree::Delimited(delimited_span, d, _) => (delimited_span.open.lo(), d),
1146+
&TokenTree::Delimited(delimited_span, d, _) => (delimited_span.open.lo(), d),
11471147
};
1148-
let args = TokenStream::new(vec![tok]);
1148+
let args = TokenStream::new(vec![tok.clone()]);
11491149
match self.toks.next()? {
11501150
TokenTree::Token(
11511151
Token {

0 commit comments

Comments
 (0)