Skip to content

Commit 4d8f757

Browse files
committed
Impl Copy for Token and TokenKind.
1 parent bb495d6 commit 4d8f757

File tree

20 files changed

+56
-57
lines changed

20 files changed

+56
-57
lines changed

compiler/rustc_ast/src/token.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,7 @@ impl From<IdentIsRaw> for bool {
333333
}
334334
}
335335

336-
#[derive(Clone, PartialEq, Encodable, Decodable, Debug, HashStable_Generic)]
336+
#[derive(Clone, Copy, PartialEq, Encodable, Decodable, Debug, HashStable_Generic)]
337337
pub enum TokenKind {
338338
/* Expression-operator symbols. */
339339
/// `=`
@@ -471,7 +471,7 @@ pub enum TokenKind {
471471
Eof,
472472
}
473473

474-
#[derive(Clone, PartialEq, Encodable, Decodable, Debug, HashStable_Generic)]
474+
#[derive(Clone, Copy, PartialEq, Encodable, Decodable, Debug, HashStable_Generic)]
475475
pub struct Token {
476476
pub kind: TokenKind,
477477
pub span: Span,

compiler/rustc_ast/src/tokenstream.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -482,7 +482,7 @@ impl TokenStream {
482482
Delimiter::Invisible(InvisibleOrigin::FlattenToken),
483483
TokenStream::token_alone(token::Lifetime(ident.name, is_raw), ident.span),
484484
),
485-
_ => TokenTree::Token(token.clone(), spacing),
485+
_ => TokenTree::Token(*token, spacing),
486486
}
487487
}
488488

compiler/rustc_expand/src/mbe/diagnostics.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ impl<'dcx, 'matcher> Tracker<'matcher> for CollectTrackerAndEmitter<'dcx, 'match
160160
.is_none_or(|failure| failure.is_better_position(*approx_position))
161161
{
162162
self.best_failure = Some(BestFailure {
163-
token: token.clone(),
163+
token: *token,
164164
position_in_tokenstream: *approx_position,
165165
msg,
166166
remaining_matcher: self

compiler/rustc_expand/src/mbe/macro_parser.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ pub(super) fn compute_locs(matcher: &[TokenTree]) -> Vec<MatcherLoc> {
179179
for tt in tts {
180180
match tt {
181181
TokenTree::Token(token) => {
182-
locs.push(MatcherLoc::Token { token: token.clone() });
182+
locs.push(MatcherLoc::Token { token: *token });
183183
}
184184
TokenTree::Delimited(span, _, delimited) => {
185185
let open_token = Token::new(token::OpenDelim(delimited.delim), span.open);
@@ -648,7 +648,7 @@ impl TtParser {
648648
// There are no possible next positions AND we aren't waiting for the black-box
649649
// parser: syntax error.
650650
return Failure(T::build_failure(
651-
parser.token.clone(),
651+
parser.token,
652652
parser.approx_token_stream_pos(),
653653
"no rules expected this token in macro call",
654654
));

compiler/rustc_expand/src/mbe/macro_rules.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -778,7 +778,7 @@ impl<'tt> FirstSets<'tt> {
778778
// token could be the separator token itself.
779779

780780
if let (Some(sep), true) = (&seq_rep.separator, subfirst.maybe_empty) {
781-
first.add_one_maybe(TtHandle::from_token(sep.clone()));
781+
first.add_one_maybe(TtHandle::from_token(*sep));
782782
}
783783

784784
// Reverse scan: Sequence comes before `first`.
@@ -841,7 +841,7 @@ impl<'tt> FirstSets<'tt> {
841841
// If the sequence contents can be empty, then the first
842842
// token could be the separator token itself.
843843
if let (Some(sep), true) = (&seq_rep.separator, subfirst.maybe_empty) {
844-
first.add_one_maybe(TtHandle::from_token(sep.clone()));
844+
first.add_one_maybe(TtHandle::from_token(*sep));
845845
}
846846

847847
assert!(first.maybe_empty);
@@ -917,7 +917,7 @@ impl<'tt> Clone for TtHandle<'tt> {
917917
// This variant *must* contain a `mbe::TokenTree::Token`, and not
918918
// any other variant of `mbe::TokenTree`.
919919
TtHandle::Token(mbe::TokenTree::Token(tok)) => {
920-
TtHandle::Token(mbe::TokenTree::Token(tok.clone()))
920+
TtHandle::Token(mbe::TokenTree::Token(*tok))
921921
}
922922

923923
_ => unreachable!(),
@@ -1093,7 +1093,7 @@ fn check_matcher_core<'tt>(
10931093
let mut new;
10941094
let my_suffix = if let Some(sep) = &seq_rep.separator {
10951095
new = suffix_first.clone();
1096-
new.add_one_maybe(TtHandle::from_token(sep.clone()));
1096+
new.add_one_maybe(TtHandle::from_token(*sep));
10971097
&new
10981098
} else {
10991099
&suffix_first

compiler/rustc_expand/src/mbe/quoted.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,7 @@ fn parse_tree<'a>(
283283
}
284284

285285
// `tree` is an arbitrary token. Keep it.
286-
tokenstream::TokenTree::Token(token, _) => TokenTree::Token(token.clone()),
286+
tokenstream::TokenTree::Token(token, _) => TokenTree::Token(*token),
287287

288288
// `tree` is the beginning of a delimited set of tokens (e.g., `(` or `{`). We need to
289289
// descend into the delimited set and further parse it.
@@ -321,7 +321,7 @@ fn parse_kleene_op(
321321
match iter.next() {
322322
Some(tokenstream::TokenTree::Token(token, _)) => match kleene_op(token) {
323323
Some(op) => Ok(Ok((op, token.span))),
324-
None => Ok(Err(token.clone())),
324+
None => Ok(Err(*token)),
325325
},
326326
tree => Err(tree.map_or(span, tokenstream::TokenTree::span)),
327327
}

compiler/rustc_expand/src/mbe/transcribe.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ pub(super) fn transcribe<'a>(
164164
if repeat_idx < repeat_len {
165165
frame.idx = 0;
166166
if let Some(sep) = sep {
167-
result.push(TokenTree::Token(sep.clone(), Spacing::Alone));
167+
result.push(TokenTree::Token(*sep, Spacing::Alone));
168168
}
169169
continue;
170170
}
@@ -438,7 +438,7 @@ pub(super) fn transcribe<'a>(
438438
// Nothing much to do here. Just push the token to the result, being careful to
439439
// preserve syntax context.
440440
mbe::TokenTree::Token(token) => {
441-
let mut token = token.clone();
441+
let mut token = *token;
442442
mut_visit::visit_token(&mut marker, &mut token);
443443
let tt = TokenTree::Token(token, Spacing::Alone);
444444
result.push(tt);

compiler/rustc_parse/src/lexer/unicode_chars.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,7 @@ pub(super) fn check_for_substitution(
376376
ascii_name,
377377
})
378378
};
379-
(token.clone(), sugg)
379+
(*token, sugg)
380380
}
381381

382382
/// Extract string if found at current position with given delimiters

compiler/rustc_parse/src/parser/attr_wrapper.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ impl ToAttrTokenStream for LazyAttrTokenStreamImpl {
120120
// produce an empty `TokenStream` if no calls were made, and omit the
121121
// final token otherwise.
122122
let mut cursor_snapshot = self.cursor_snapshot.clone();
123-
let tokens = iter::once(FlatToken::Token(self.start_token.clone()))
123+
let tokens = iter::once(FlatToken::Token(self.start_token))
124124
.chain(iter::repeat_with(|| FlatToken::Token(cursor_snapshot.next())))
125125
.take(self.num_calls as usize);
126126

@@ -186,7 +186,7 @@ impl ToAttrTokenStream for LazyAttrTokenStreamImpl {
186186
impl<'a> Parser<'a> {
187187
pub(super) fn collect_pos(&self) -> CollectPos {
188188
CollectPos {
189-
start_token: (self.token.clone(), self.token_spacing),
189+
start_token: (self.token, self.token_spacing),
190190
cursor_snapshot: self.token_cursor.clone(),
191191
start_pos: self.num_bump_calls,
192192
}

compiler/rustc_parse/src/parser/diagnostics.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,7 @@ impl<'a> Parser<'a> {
322322
let mut recovered_ident = None;
323323
// we take this here so that the correct original token is retained in
324324
// the diagnostic, regardless of eager recovery.
325-
let bad_token = self.token.clone();
325+
let bad_token = self.token;
326326

327327
// suggest prepending a keyword in identifier position with `r#`
328328
let suggest_raw = if let Some((ident, IdentIsRaw::No)) = self.token.ident()
@@ -382,7 +382,7 @@ impl<'a> Parser<'a> {
382382
// if the previous token is a valid keyword
383383
// that might use a generic, then suggest a correct
384384
// generic placement (later on)
385-
let maybe_keyword = self.prev_token.clone();
385+
let maybe_keyword = self.prev_token;
386386
if valid_prev_keywords.into_iter().any(|x| maybe_keyword.is_keyword(x)) {
387387
// if we have a valid keyword, attempt to parse generics
388388
// also obtain the keywords symbol
@@ -530,7 +530,7 @@ impl<'a> Parser<'a> {
530530
// let y = 42;
531531
let guar = self.dcx().emit_err(ExpectedSemi {
532532
span: self.token.span,
533-
token: self.token.clone(),
533+
token: self.token,
534534
unexpected_token_label: None,
535535
sugg: ExpectedSemiSugg::ChangeToSemi(self.token.span),
536536
});
@@ -555,7 +555,7 @@ impl<'a> Parser<'a> {
555555
let span = self.prev_token.span.shrink_to_hi();
556556
let guar = self.dcx().emit_err(ExpectedSemi {
557557
span,
558-
token: self.token.clone(),
558+
token: self.token,
559559
unexpected_token_label: Some(self.token.span),
560560
sugg: ExpectedSemiSugg::AddSemi(span),
561561
});
@@ -801,7 +801,7 @@ impl<'a> Parser<'a> {
801801
let span = self.prev_token.span.shrink_to_hi();
802802
let mut err = self.dcx().create_err(ExpectedSemi {
803803
span,
804-
token: self.token.clone(),
804+
token: self.token,
805805
unexpected_token_label: Some(self.token.span),
806806
sugg: ExpectedSemiSugg::AddSemi(span),
807807
});

compiler/rustc_parse/src/parser/expr.rs

+10-10
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,7 @@ impl<'a> Parser<'a> {
344344
fn error_found_expr_would_be_stmt(&self, lhs: &Expr) {
345345
self.dcx().emit_err(errors::FoundExprWouldBeStmt {
346346
span: self.token.span,
347-
token: self.token.clone(),
347+
token: self.token,
348348
suggestion: ExprParenthesesNeeded::surrounding(lhs.span),
349349
});
350350
}
@@ -417,7 +417,7 @@ impl<'a> Parser<'a> {
417417
cur_op_span: Span,
418418
) -> PResult<'a, P<Expr>> {
419419
let rhs = if self.is_at_start_of_range_notation_rhs() {
420-
let maybe_lt = self.token.clone();
420+
let maybe_lt = self.token;
421421
let attrs = self.parse_outer_attributes()?;
422422
Some(
423423
self.parse_expr_assoc_with(Bound::Excluded(prec), attrs)
@@ -611,7 +611,7 @@ impl<'a> Parser<'a> {
611611

612612
/// Recover on `not expr` in favor of `!expr`.
613613
fn recover_not_expr(&mut self, lo: Span) -> PResult<'a, (Span, ExprKind)> {
614-
let negated_token = self.look_ahead(1, |t| t.clone());
614+
let negated_token = self.look_ahead(1, |t| *t);
615615

616616
let sub_diag = if negated_token.is_numeric_lit() {
617617
errors::NotAsNegationOperatorSub::SuggestNotBitwise
@@ -1606,7 +1606,7 @@ impl<'a> Parser<'a> {
16061606
}
16071607

16081608
fn parse_expr_path_start(&mut self) -> PResult<'a, P<Expr>> {
1609-
let maybe_eq_tok = self.prev_token.clone();
1609+
let maybe_eq_tok = self.prev_token;
16101610
let (qself, path) = if self.eat_lt() {
16111611
let lt_span = self.prev_token.span;
16121612
let (qself, path) = self.parse_qpath(PathStyle::Expr).map_err(|mut err| {
@@ -2067,7 +2067,7 @@ impl<'a> Parser<'a> {
20672067
&mut self,
20682068
mk_lit_char: impl FnOnce(Symbol, Span) -> L,
20692069
) -> PResult<'a, L> {
2070-
let token = self.token.clone();
2070+
let token = self.token;
20712071
let err = |self_: &Self| {
20722072
let msg = format!("unexpected token: {}", super::token_descr(&token));
20732073
self_.dcx().struct_span_err(token.span, msg)
@@ -2368,7 +2368,7 @@ impl<'a> Parser<'a> {
23682368
fn parse_expr_closure(&mut self) -> PResult<'a, P<Expr>> {
23692369
let lo = self.token.span;
23702370

2371-
let before = self.prev_token.clone();
2371+
let before = self.prev_token;
23722372
let binder = if self.check_keyword(exp!(For)) {
23732373
let lo = self.token.span;
23742374
let (lifetime_defs, _) = self.parse_late_bound_lifetime_defs()?;
@@ -2400,8 +2400,8 @@ impl<'a> Parser<'a> {
24002400
FnRetTy::Default(_) => {
24012401
let restrictions =
24022402
self.restrictions - Restrictions::STMT_EXPR - Restrictions::ALLOW_LET;
2403-
let prev = self.prev_token.clone();
2404-
let token = self.token.clone();
2403+
let prev = self.prev_token;
2404+
let token = self.token;
24052405
let attrs = self.parse_outer_attributes()?;
24062406
match self.parse_expr_res(restrictions, attrs) {
24072407
Ok((expr, _)) => expr,
@@ -2648,7 +2648,7 @@ impl<'a> Parser<'a> {
26482648
}
26492649
} else {
26502650
let attrs = self.parse_outer_attributes()?; // For recovery.
2651-
let maybe_fatarrow = self.token.clone();
2651+
let maybe_fatarrow = self.token;
26522652
let block = if self.check(exp!(OpenBrace)) {
26532653
self.parse_block()?
26542654
} else if let Some(block) = recover_block_from_condition(self) {
@@ -3856,7 +3856,7 @@ impl<'a> Parser<'a> {
38563856
return Err(this.dcx().create_err(errors::ExpectedStructField {
38573857
span: this.look_ahead(1, |t| t.span),
38583858
ident_span: this.token.span,
3859-
token: this.look_ahead(1, |t| t.clone()),
3859+
token: this.look_ahead(1, |t| *t),
38603860
}));
38613861
}
38623862
let (ident, expr) = if is_shorthand {

compiler/rustc_parse/src/parser/item.rs

+2-3
Original file line numberDiff line numberDiff line change
@@ -1739,8 +1739,7 @@ impl<'a> Parser<'a> {
17391739
self.expect_semi()?;
17401740
body
17411741
} else {
1742-
let err =
1743-
errors::UnexpectedTokenAfterStructName::new(self.token.span, self.token.clone());
1742+
let err = errors::UnexpectedTokenAfterStructName::new(self.token.span, self.token);
17441743
return Err(self.dcx().create_err(err));
17451744
};
17461745

@@ -2310,7 +2309,7 @@ impl<'a> Parser<'a> {
23102309
|| self.token.is_keyword(kw::Union))
23112310
&& self.look_ahead(1, |t| t.is_ident())
23122311
{
2313-
let kw_token = self.token.clone();
2312+
let kw_token = self.token;
23142313
let kw_str = pprust::token_to_string(&kw_token);
23152314
let item = self.parse_item(ForceCollect::No)?;
23162315
let mut item = item.unwrap().span;

compiler/rustc_parse/src/parser/mod.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -326,12 +326,12 @@ impl TokenCursor {
326326
// below can be removed.
327327
if let Some(tree) = self.curr.curr() {
328328
match tree {
329-
&TokenTree::Token(ref token, spacing) => {
329+
&TokenTree::Token(token, spacing) => {
330330
debug_assert!(!matches!(
331331
token.kind,
332332
token::OpenDelim(_) | token::CloseDelim(_)
333333
));
334-
let res = (token.clone(), spacing);
334+
let res = (token, spacing);
335335
self.curr.bump();
336336
return res;
337337
}
@@ -1490,7 +1490,7 @@ impl<'a> Parser<'a> {
14901490
_ => {
14911491
let prev_spacing = self.token_spacing;
14921492
self.bump();
1493-
TokenTree::Token(self.prev_token.clone(), prev_spacing)
1493+
TokenTree::Token(self.prev_token, prev_spacing)
14941494
}
14951495
}
14961496
}
@@ -1676,7 +1676,7 @@ impl<'a> Parser<'a> {
16761676
dbg_fmt.field("prev_token", &self.prev_token);
16771677
let mut tokens = vec![];
16781678
for i in 0..lookahead {
1679-
let tok = self.look_ahead(i, |tok| tok.kind.clone());
1679+
let tok = self.look_ahead(i, |tok| tok.kind);
16801680
let is_eof = tok == TokenKind::Eof;
16811681
tokens.push(tok);
16821682
if is_eof {

compiler/rustc_parse/src/parser/nonterminal.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ impl<'a> Parser<'a> {
168168
} else {
169169
Err(self.dcx().create_err(UnexpectedNonterminal::Ident {
170170
span: self.token.span,
171-
token: self.token.clone(),
171+
token: self.token,
172172
}))
173173
}
174174
}
@@ -191,7 +191,7 @@ impl<'a> Parser<'a> {
191191
} else {
192192
Err(self.dcx().create_err(UnexpectedNonterminal::Lifetime {
193193
span: self.token.span,
194-
token: self.token.clone(),
194+
token: self.token,
195195
}))
196196
}
197197
}

compiler/rustc_parse/src/parser/pat.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,7 @@ impl<'a> Parser<'a> {
363363
self.dcx().emit_err(TrailingVertNotAllowed {
364364
span: self.token.span,
365365
start: lo,
366-
token: self.token.clone(),
366+
token: self.token,
367367
note_double_vert: matches!(self.token.kind, token::OrOr),
368368
});
369369
self.bump();
@@ -1519,8 +1519,8 @@ impl<'a> Parser<'a> {
15191519
etc = PatFieldsRest::Rest;
15201520
let mut etc_sp = self.token.span;
15211521
if first_etc_and_maybe_comma_span.is_none() {
1522-
if let Some(comma_tok) = self
1523-
.look_ahead(1, |t| if *t == token::Comma { Some(t.clone()) } else { None })
1522+
if let Some(comma_tok) =
1523+
self.look_ahead(1, |&t| if t == token::Comma { Some(t) } else { None })
15241524
{
15251525
let nw_span = self
15261526
.psess

compiler/rustc_parse/src/parser/path.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -393,8 +393,8 @@ impl<'a> Parser<'a> {
393393
} else {
394394
// `(T, U) -> R`
395395

396-
let prev_token_before_parsing = self.prev_token.clone();
397-
let token_before_parsing = self.token.clone();
396+
let prev_token_before_parsing = self.prev_token;
397+
let token_before_parsing = self.token;
398398
let mut snapshot = None;
399399
if self.may_recover()
400400
&& prev_token_before_parsing == token::PathSep

compiler/rustc_parse/src/parser/stmt.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -685,7 +685,7 @@ impl<'a> Parser<'a> {
685685
return Ok((AttrVec::new(), block));
686686
}
687687

688-
let maybe_ident = self.prev_token.clone();
688+
let maybe_ident = self.prev_token;
689689
self.maybe_recover_unexpected_block_label(loop_header);
690690
if !self.eat(exp!(OpenBrace)) {
691691
return self.error_block_no_opening_brace();

compiler/rustc_parse/src/parser/tests.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2554,7 +2554,7 @@ fn look(p: &Parser<'_>, dist: usize, kind: rustc_ast::token::TokenKind) {
25542554
// Do the `assert_eq` outside the closure so that `track_caller` works.
25552555
// (`#![feature(closure_track_caller)]` + `#[track_caller]` on the closure
25562556
// doesn't give the line number in the test below if the assertion fails.)
2557-
let tok = p.look_ahead(dist, |tok| tok.clone());
2557+
let tok = p.look_ahead(dist, |tok| *tok);
25582558
assert_eq!(kind, tok.kind);
25592559
}
25602560

0 commit comments

Comments
 (0)