From 7d2173ed27c1cddc4d4a7a9755f244b66cf1ec81 Mon Sep 17 00:00:00 2001 From: Nicholas Nethercote Date: Fri, 13 Dec 2019 11:25:08 +1100 Subject: [PATCH] Use `P` for `NtMeta`. This commit reduces the size of `Nonterminal` from a 72 bytes to 40 bytes (on x86-64). --- src/librustc_expand/mbe/macro_parser.rs | 3 ++- src/librustc_parse/parser/attr.rs | 2 +- src/libsyntax/mut_visit.rs | 3 ++- 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 246f66084b813..6e7a4a556b80c 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 3d40b91a7bdc8..1869389dbd9e6 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 e9e1675b9b06e..3bcdf8fe286e4 100644 --- a/src/libsyntax/mut_visit.rs +++ b/src/libsyntax/mut_visit.rs @@ -704,7 +704,8 @@ pub fn noop_visit_interpolated(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 c826b728f8004..3045f147698a5 100644 --- a/src/libsyntax/token.rs +++ b/src/libsyntax/token.rs @@ -673,7 +673,7 @@ pub enum Nonterminal { NtLifetime(ast::Ident), NtLiteral(P), /// Stuff inside brackets for attributes - NtMeta(ast::AttrItem), + NtMeta(P), 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 {