diff options
| author | Nicholas Nethercote <nnethercote@mozilla.com> | 2019-12-13 11:25:08 +1100 |
|---|---|---|
| committer | Nicholas Nethercote <nnethercote@mozilla.com> | 2020-01-30 11:19:40 +1100 |
| commit | 7d2173ed27c1cddc4d4a7a9755f244b66cf1ec81 (patch) | |
| tree | bd6b839356cc0830d36c62079f9c76fd5919f946 | |
| parent | 0d69fe8308a76630a104504c14e1d3d74e2a3f15 (diff) | |
Use `P` for `NtMeta`.
This commit reduces the size of `Nonterminal` from a 72 bytes to 40 bytes (on x86-64).
| -rw-r--r-- | src/librustc_expand/mbe/macro_parser.rs | 3 | ||||
| -rw-r--r-- | src/librustc_parse/parser/attr.rs | 2 | ||||
| -rw-r--r-- | src/libsyntax/mut_visit.rs | 3 | ||||
| -rw-r--r-- | src/libsyntax/token.rs | 4 |
4 files changed, 7 insertions, 5 deletions
diff --git a/src/librustc_expand/mbe/macro_parser.rs b/src/librustc_expand/mbe/macro_parser.rs index 246f66084b8..6e7a4a556b8 100644 --- a/src/librustc_expand/mbe/macro_parser.rs +++ b/src/librustc_expand/mbe/macro_parser.rs @@ -81,6 +81,7 @@ use rustc_parse::Directory; use rustc_span::symbol::{kw, sym, Symbol}; use syntax::ast::{Ident, Name}; use syntax::print::pprust; +use syntax::ptr::P; use syntax::sess::ParseSess; use syntax::token::{self, DocComment, Nonterminal, Token}; use syntax::tokenstream::TokenStream; @@ -914,7 +915,7 @@ fn parse_nt_inner<'a>(p: &mut Parser<'a>, sp: Span, name: Symbol) -> PResult<'a, } } sym::path => token::NtPath(p.parse_path(PathStyle::Type)?), - sym::meta => token::NtMeta(p.parse_attr_item()?), + sym::meta => token::NtMeta(P(p.parse_attr_item()?)), sym::vis => token::NtVis(p.parse_visibility(FollowedByType::Yes)?), sym::lifetime => { if p.check_lifetime() { diff --git a/src/librustc_parse/parser/attr.rs b/src/librustc_parse/parser/attr.rs index 3d40b91a7bd..1869389dbd9 100644 --- a/src/librustc_parse/parser/attr.rs +++ b/src/librustc_parse/parser/attr.rs @@ -177,7 +177,7 @@ impl<'a> Parser<'a> { pub fn parse_attr_item(&mut self) -> PResult<'a, ast::AttrItem> { let item = match self.token.kind { token::Interpolated(ref nt) => match **nt { - Nonterminal::NtMeta(ref item) => Some(item.clone()), + Nonterminal::NtMeta(ref item) => Some(item.clone().into_inner()), _ => None, }, _ => None, diff --git a/src/libsyntax/mut_visit.rs b/src/libsyntax/mut_visit.rs index e9e1675b9b0..3bcdf8fe286 100644 --- a/src/libsyntax/mut_visit.rs +++ b/src/libsyntax/mut_visit.rs @@ -704,7 +704,8 @@ pub fn noop_visit_interpolated<T: MutVisitor>(nt: &mut token::Nonterminal, vis: token::NtIdent(ident, _is_raw) => vis.visit_ident(ident), token::NtLifetime(ident) => vis.visit_ident(ident), token::NtLiteral(expr) => vis.visit_expr(expr), - token::NtMeta(AttrItem { path, args }) => { + token::NtMeta(item) => { + let AttrItem { path, args } = item.deref_mut(); vis.visit_path(path); visit_mac_args(args, vis); } diff --git a/src/libsyntax/token.rs b/src/libsyntax/token.rs index c826b728f80..3045f147698 100644 --- a/src/libsyntax/token.rs +++ b/src/libsyntax/token.rs @@ -673,7 +673,7 @@ pub enum Nonterminal { NtLifetime(ast::Ident), NtLiteral(P<ast::Expr>), /// Stuff inside brackets for attributes - NtMeta(ast::AttrItem), + NtMeta(P<ast::AttrItem>), NtPath(ast::Path), NtVis(ast::Visibility), NtTT(TokenTree), @@ -687,7 +687,7 @@ pub enum Nonterminal { // `Nonterminal` is used a lot. Make sure it doesn't unintentionally get bigger. #[cfg(target_arch = "x86_64")] -rustc_data_structures::static_assert_size!(Nonterminal, 72); +rustc_data_structures::static_assert_size!(Nonterminal, 40); impl PartialEq for Nonterminal { fn eq(&self, rhs: &Self) -> bool { |
