about summary refs log tree commit diff
diff options
context:
space:
mode:
authorNicholas Nethercote <nnethercote@mozilla.com>2019-12-13 11:25:08 +1100
committerNicholas Nethercote <nnethercote@mozilla.com>2020-01-30 11:19:40 +1100
commit7d2173ed27c1cddc4d4a7a9755f244b66cf1ec81 (patch)
treebd6b839356cc0830d36c62079f9c76fd5919f946
parent0d69fe8308a76630a104504c14e1d3d74e2a3f15 (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.rs3
-rw-r--r--src/librustc_parse/parser/attr.rs2
-rw-r--r--src/libsyntax/mut_visit.rs3
-rw-r--r--src/libsyntax/token.rs4
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 {