diff options
| author | bors <bors@rust-lang.org> | 2021-08-29 17:46:29 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2021-08-29 17:46:29 +0000 |
| commit | ae0b03bc6b4e1544f43b9a8053bdb0f0ed4a19e1 (patch) | |
| tree | 42249083f8e03da1de24a7b775c1d2e6e182954d | |
| parent | daa4dc997c777676b0f0e48d0311cc5e7bde5f87 (diff) | |
| parent | c565339c37def41500c6d3175c2db3be8c5c4f76 (diff) | |
| download | rust-ae0b03bc6b4e1544f43b9a8053bdb0f0ed4a19e1.tar.gz rust-ae0b03bc6b4e1544f43b9a8053bdb0f0ed4a19e1.zip | |
Auto merge of #88262 - klensy:pprust-cow, r=nagisa
Cow'ify some pprust methods Reduce number of potential needless de/allocations by using `Cow<'static, str>` instead of explicit `String` type.
| -rw-r--r-- | compiler/rustc_ast_pretty/src/pprust/mod.rs | 6 | ||||
| -rw-r--r-- | compiler/rustc_ast_pretty/src/pprust/state.rs | 92 | ||||
| -rw-r--r-- | compiler/rustc_expand/src/mbe/macro_rules.rs | 2 | ||||
| -rw-r--r-- | compiler/rustc_parse/src/parser/expr.rs | 2 | ||||
| -rw-r--r-- | compiler/rustc_parse/src/parser/mod.rs | 2 |
5 files changed, 53 insertions, 51 deletions
diff --git a/compiler/rustc_ast_pretty/src/pprust/mod.rs b/compiler/rustc_ast_pretty/src/pprust/mod.rs index 976725b308e..e74f38dd89c 100644 --- a/compiler/rustc_ast_pretty/src/pprust/mod.rs +++ b/compiler/rustc_ast_pretty/src/pprust/mod.rs @@ -8,17 +8,19 @@ use rustc_ast as ast; use rustc_ast::token::{Nonterminal, Token, TokenKind}; use rustc_ast::tokenstream::{TokenStream, TokenTree}; +use std::borrow::Cow; + pub fn nonterminal_to_string(nt: &Nonterminal) -> String { State::new().nonterminal_to_string(nt) } /// Print the token kind precisely, without converting `$crate` into its respective crate name. -pub fn token_kind_to_string(tok: &TokenKind) -> String { +pub fn token_kind_to_string(tok: &TokenKind) -> Cow<'static, str> { State::new().token_kind_to_string(tok) } /// Print the token precisely, without converting `$crate` into its respective crate name. -pub fn token_to_string(token: &Token) -> String { +pub fn token_to_string(token: &Token) -> Cow<'static, str> { State::new().token_to_string(token) } diff --git a/compiler/rustc_ast_pretty/src/pprust/state.rs b/compiler/rustc_ast_pretty/src/pprust/state.rs index f729973ddc6..949e7a1fbb8 100644 --- a/compiler/rustc_ast_pretty/src/pprust/state.rs +++ b/compiler/rustc_ast_pretty/src/pprust/state.rs @@ -685,7 +685,7 @@ pub trait PrintState<'a>: std::ops::Deref<Target = pp::Printer> + std::ops::Dere } /// Print the token kind precisely, without converting `$crate` into its respective crate name. - fn token_kind_to_string(&self, tok: &TokenKind) -> String { + fn token_kind_to_string(&self, tok: &TokenKind) -> Cow<'static, str> { self.token_kind_to_string_ext(tok, None) } @@ -693,72 +693,72 @@ pub trait PrintState<'a>: std::ops::Deref<Target = pp::Printer> + std::ops::Dere &self, tok: &TokenKind, convert_dollar_crate: Option<Span>, - ) -> String { + ) -> Cow<'static, str> { match *tok { - token::Eq => "=".to_string(), - token::Lt => "<".to_string(), - token::Le => "<=".to_string(), - token::EqEq => "==".to_string(), - token::Ne => "!=".to_string(), - token::Ge => ">=".to_string(), - token::Gt => ">".to_string(), - token::Not => "!".to_string(), - token::Tilde => "~".to_string(), - token::OrOr => "||".to_string(), - token::AndAnd => "&&".to_string(), - token::BinOp(op) => binop_to_string(op).to_string(), - token::BinOpEq(op) => format!("{}=", binop_to_string(op)), + token::Eq => "=".into(), + token::Lt => "<".into(), + token::Le => "<=".into(), + token::EqEq => "==".into(), + token::Ne => "!=".into(), + token::Ge => ">=".into(), + token::Gt => ">".into(), + token::Not => "!".into(), + token::Tilde => "~".into(), + token::OrOr => "||".into(), + token::AndAnd => "&&".into(), + token::BinOp(op) => binop_to_string(op).into(), + token::BinOpEq(op) => format!("{}=", binop_to_string(op)).into(), /* Structural symbols */ - token::At => "@".to_string(), - token::Dot => ".".to_string(), - token::DotDot => "..".to_string(), - token::DotDotDot => "...".to_string(), - token::DotDotEq => "..=".to_string(), - token::Comma => ",".to_string(), - token::Semi => ";".to_string(), - token::Colon => ":".to_string(), - token::ModSep => "::".to_string(), - token::RArrow => "->".to_string(), - token::LArrow => "<-".to_string(), - token::FatArrow => "=>".to_string(), - token::OpenDelim(token::Paren) => "(".to_string(), - token::CloseDelim(token::Paren) => ")".to_string(), - token::OpenDelim(token::Bracket) => "[".to_string(), - token::CloseDelim(token::Bracket) => "]".to_string(), - token::OpenDelim(token::Brace) => "{".to_string(), - token::CloseDelim(token::Brace) => "}".to_string(), - token::OpenDelim(token::NoDelim) | token::CloseDelim(token::NoDelim) => "".to_string(), - token::Pound => "#".to_string(), - token::Dollar => "$".to_string(), - token::Question => "?".to_string(), - token::SingleQuote => "'".to_string(), + token::At => "@".into(), + token::Dot => ".".into(), + token::DotDot => "..".into(), + token::DotDotDot => "...".into(), + token::DotDotEq => "..=".into(), + token::Comma => ",".into(), + token::Semi => ";".into(), + token::Colon => ":".into(), + token::ModSep => "::".into(), + token::RArrow => "->".into(), + token::LArrow => "<-".into(), + token::FatArrow => "=>".into(), + token::OpenDelim(token::Paren) => "(".into(), + token::CloseDelim(token::Paren) => ")".into(), + token::OpenDelim(token::Bracket) => "[".into(), + token::CloseDelim(token::Bracket) => "]".into(), + token::OpenDelim(token::Brace) => "{".into(), + token::CloseDelim(token::Brace) => "}".into(), + token::OpenDelim(token::NoDelim) | token::CloseDelim(token::NoDelim) => "".into(), + token::Pound => "#".into(), + token::Dollar => "$".into(), + token::Question => "?".into(), + token::SingleQuote => "'".into(), /* Literals */ - token::Literal(lit) => literal_to_string(lit), + token::Literal(lit) => literal_to_string(lit).into(), /* Name components */ token::Ident(s, is_raw) => { - IdentPrinter::new(s, is_raw, convert_dollar_crate).to_string() + IdentPrinter::new(s, is_raw, convert_dollar_crate).to_string().into() } - token::Lifetime(s) => s.to_string(), + token::Lifetime(s) => s.to_string().into(), /* Other */ token::DocComment(comment_kind, attr_style, data) => { - doc_comment_to_string(comment_kind, attr_style, data) + doc_comment_to_string(comment_kind, attr_style, data).into() } - token::Eof => "<eof>".to_string(), + token::Eof => "<eof>".into(), - token::Interpolated(ref nt) => self.nonterminal_to_string(nt), + token::Interpolated(ref nt) => self.nonterminal_to_string(nt).into(), } } /// Print the token precisely, without converting `$crate` into its respective crate name. - fn token_to_string(&self, token: &Token) -> String { + fn token_to_string(&self, token: &Token) -> Cow<'static, str> { self.token_to_string_ext(token, false) } - fn token_to_string_ext(&self, token: &Token, convert_dollar_crate: bool) -> String { + fn token_to_string_ext(&self, token: &Token, convert_dollar_crate: bool) -> Cow<'static, str> { let convert_dollar_crate = convert_dollar_crate.then_some(token.span); self.token_kind_to_string_ext(&token.kind, convert_dollar_crate) } diff --git a/compiler/rustc_expand/src/mbe/macro_rules.rs b/compiler/rustc_expand/src/mbe/macro_rules.rs index e0c62388fe0..f8491654f39 100644 --- a/compiler/rustc_expand/src/mbe/macro_rules.rs +++ b/compiler/rustc_expand/src/mbe/macro_rules.rs @@ -1221,7 +1221,7 @@ fn is_in_follow(tok: &mbe::TokenTree, kind: NonterminalKind) -> IsInFollow { fn quoted_tt_to_string(tt: &mbe::TokenTree) -> String { match *tt { - mbe::TokenTree::Token(ref token) => pprust::token_to_string(&token), + mbe::TokenTree::Token(ref token) => pprust::token_to_string(&token).into(), mbe::TokenTree::MetaVar(_, name) => format!("${}", name), mbe::TokenTree::MetaVarDecl(_, name, Some(kind)) => format!("${}:{}", name, kind), mbe::TokenTree::MetaVarDecl(_, name, None) => format!("${}:", name), diff --git a/compiler/rustc_parse/src/parser/expr.rs b/compiler/rustc_parse/src/parser/expr.rs index 326c8f81ffb..e71edbc861a 100644 --- a/compiler/rustc_parse/src/parser/expr.rs +++ b/compiler/rustc_parse/src/parser/expr.rs @@ -1528,7 +1528,7 @@ impl<'a> Parser<'a> { .span_suggestion( token.span, "must have an integer part", - pprust::token_to_string(token), + pprust::token_to_string(token).into(), Applicability::MachineApplicable, ) .emit(); diff --git a/compiler/rustc_parse/src/parser/mod.rs b/compiler/rustc_parse/src/parser/mod.rs index 4c3c140d171..c34fd02e806 100644 --- a/compiler/rustc_parse/src/parser/mod.rs +++ b/compiler/rustc_parse/src/parser/mod.rs @@ -806,7 +806,7 @@ impl<'a> Parser<'a> { .span_suggestion_short( sp, &format!("missing `{}`", token_str), - token_str, + token_str.into(), Applicability::MaybeIncorrect, ) .emit(); |
