diff --git a/compiler/rustc_expand/src/mbe.rs b/compiler/rustc_expand/src/mbe.rs index 845d1ff5b51..a5b8571fefe 100644 --- a/compiler/rustc_expand/src/mbe.rs +++ b/compiler/rustc_expand/src/mbe.rs @@ -13,7 +13,6 @@ crate mod transcribe; use metavar_expr::MetaVarExpr; use rustc_ast::token::{self, NonterminalKind, Token, TokenKind}; use rustc_ast::tokenstream::DelimSpan; -use rustc_data_structures::sync::Lrc; use rustc_span::symbol::Ident; use rustc_span::Span; @@ -64,13 +63,13 @@ enum KleeneOp { /// Similar to `tokenstream::TokenTree`, except that `Sequence`, `MetaVar`, `MetaVarDecl`, and /// `MetaVarExpr` are "first-class" token trees. Useful for parsing macros. -#[derive(Debug, Clone, PartialEq, Encodable, Decodable)] +#[derive(Debug, PartialEq, Encodable, Decodable)] enum TokenTree { Token(Token), /// A delimited sequence, e.g. `($e:expr)` (RHS) or `{ $e }` (LHS). - Delimited(DelimSpan, Lrc), + Delimited(DelimSpan, Delimited), /// A kleene-style repetition sequence, e.g. `$($e:expr)*` (RHS) or `$($e),*` (LHS). - Sequence(DelimSpan, Lrc), + Sequence(DelimSpan, SequenceRepetition), /// e.g., `$var`. MetaVar(Span, Ident), /// e.g., `$var:expr`. Only appears on the LHS. diff --git a/compiler/rustc_expand/src/mbe/macro_rules.rs b/compiler/rustc_expand/src/mbe/macro_rules.rs index f9d24eeadd0..ef174c3c45e 100644 --- a/compiler/rustc_expand/src/mbe/macro_rules.rs +++ b/compiler/rustc_expand/src/mbe/macro_rules.rs @@ -14,7 +14,6 @@ use rustc_ast::{NodeId, DUMMY_NODE_ID}; use rustc_ast_pretty::pprust; use rustc_attr::{self as attr, TransparencyError}; use rustc_data_structures::fx::FxHashMap; -use rustc_data_structures::sync::Lrc; use rustc_errors::{Applicability, Diagnostic, DiagnosticBuilder}; use rustc_feature::Features; use rustc_lint_defs::builtin::{ @@ -407,7 +406,7 @@ pub fn compile_declarative_macro( let argument_gram = vec![ mbe::TokenTree::Sequence( DelimSpan::dummy(), - Lrc::new(mbe::SequenceRepetition { + mbe::SequenceRepetition { tts: vec![ mbe::TokenTree::MetaVarDecl(def.span, lhs_nm, tt_spec), mbe::TokenTree::token(token::FatArrow, def.span), @@ -419,12 +418,12 @@ pub fn compile_declarative_macro( )), kleene: mbe::KleeneToken::new(mbe::KleeneOp::OneOrMore, def.span), num_captures: 2, - }), + }, ), // to phase into semicolon-termination instead of semicolon-separation mbe::TokenTree::Sequence( DelimSpan::dummy(), - Lrc::new(mbe::SequenceRepetition { + mbe::SequenceRepetition { tts: vec![mbe::TokenTree::token( if macro_rules { token::Semi } else { token::Comma }, def.span, @@ -432,7 +431,7 @@ pub fn compile_declarative_macro( separator: None, kleene: mbe::KleeneToken::new(mbe::KleeneOp::ZeroOrMore, def.span), num_captures: 0, - }), + }, ), ]; // Convert it into `MatcherLoc` form. diff --git a/compiler/rustc_expand/src/mbe/quoted.rs b/compiler/rustc_expand/src/mbe/quoted.rs index 024299fbd9c..0bce6967a10 100644 --- a/compiler/rustc_expand/src/mbe/quoted.rs +++ b/compiler/rustc_expand/src/mbe/quoted.rs @@ -11,8 +11,6 @@ use rustc_span::symbol::{kw, sym, Ident}; use rustc_span::edition::Edition; use rustc_span::{Span, SyntaxContext}; -use rustc_data_structures::sync::Lrc; - const VALID_FRAGMENT_NAMES_MSG: &str = "valid fragment specifiers are \ `ident`, `block`, `stmt`, `expr`, `pat`, `ty`, `lifetime`, \ `literal`, `path`, `meta`, `tt`, `item` and `vis`"; @@ -213,12 +211,7 @@ fn parse_tree( if parsing_patterns { count_metavar_decls(&sequence) } else { 0 }; TokenTree::Sequence( delim_span, - Lrc::new(SequenceRepetition { - tts: sequence, - separator, - kleene, - num_captures, - }), + SequenceRepetition { tts: sequence, separator, kleene, num_captures }, ) } @@ -269,10 +262,10 @@ fn parse_tree( // descend into the delimited set and further parse it. tokenstream::TokenTree::Delimited(span, delim, tts) => TokenTree::Delimited( span, - Lrc::new(Delimited { + Delimited { delim, tts: parse(tts, parsing_patterns, sess, node_id, features, edition), - }), + }, ), } }