Shrink hir_expand::attr::AttrInput by boxing a variant

This commit is contained in:
Lukas Wirth 2023-06-10 01:21:52 +02:00
parent 993299ee3f
commit b6fb35f20c
2 changed files with 8 additions and 8 deletions

View file

@ -1028,13 +1028,13 @@ fn attr_macro_as_call_id(
def: MacroDefId, def: MacroDefId,
) -> MacroCallId { ) -> MacroCallId {
let arg = match macro_attr.input.as_deref() { let arg = match macro_attr.input.as_deref() {
Some(AttrInput::TokenTree(tt, map)) => ( Some(AttrInput::TokenTree(tt)) => (
{ {
let mut tt = tt.clone(); let mut tt = tt.0.clone();
tt.delimiter = tt::Delimiter::UNSPECIFIED; tt.delimiter = tt::Delimiter::UNSPECIFIED;
tt tt
}, },
map.clone(), tt.1.clone(),
), ),
_ => (tt::Subtree::empty(), Default::default()), _ => (tt::Subtree::empty(), Default::default()),
}; };

View file

@ -192,14 +192,14 @@ pub enum AttrInput {
/// `#[attr = "string"]` /// `#[attr = "string"]`
Literal(SmolStr), Literal(SmolStr),
/// `#[attr(subtree)]` /// `#[attr(subtree)]`
TokenTree(tt::Subtree, mbe::TokenMap), TokenTree(Box<(tt::Subtree, mbe::TokenMap)>),
} }
impl fmt::Display for AttrInput { impl fmt::Display for AttrInput {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self { match self {
AttrInput::Literal(lit) => write!(f, " = \"{}\"", lit.escape_debug()), AttrInput::Literal(lit) => write!(f, " = \"{}\"", lit.escape_debug()),
AttrInput::TokenTree(subtree, _) => subtree.fmt(f), AttrInput::TokenTree(tt) => tt.0.fmt(f),
} }
} }
} }
@ -220,7 +220,7 @@ impl Attr {
Some(Interned::new(AttrInput::Literal(value))) Some(Interned::new(AttrInput::Literal(value)))
} else if let Some(tt) = ast.token_tree() { } else if let Some(tt) = ast.token_tree() {
let (tree, map) = syntax_node_to_token_tree(tt.syntax()); let (tree, map) = syntax_node_to_token_tree(tt.syntax());
Some(Interned::new(AttrInput::TokenTree(tree, map))) Some(Interned::new(AttrInput::TokenTree(Box::new((tree, map)))))
} else { } else {
None None
}; };
@ -256,7 +256,7 @@ impl Attr {
/// #[path(ident)] /// #[path(ident)]
pub fn single_ident_value(&self) -> Option<&tt::Ident> { pub fn single_ident_value(&self) -> Option<&tt::Ident> {
match self.input.as_deref()? { match self.input.as_deref()? {
AttrInput::TokenTree(subtree, _) => match &*subtree.token_trees { AttrInput::TokenTree(tt) => match &*tt.0.token_trees {
[tt::TokenTree::Leaf(tt::Leaf::Ident(ident))] => Some(ident), [tt::TokenTree::Leaf(tt::Leaf::Ident(ident))] => Some(ident),
_ => None, _ => None,
}, },
@ -267,7 +267,7 @@ impl Attr {
/// #[path TokenTree] /// #[path TokenTree]
pub fn token_tree_value(&self) -> Option<&Subtree> { pub fn token_tree_value(&self) -> Option<&Subtree> {
match self.input.as_deref()? { match self.input.as_deref()? {
AttrInput::TokenTree(subtree, _) => Some(subtree), AttrInput::TokenTree(tt) => Some(&tt.0),
_ => None, _ => None,
} }
} }