mirror of
				https://github.com/rust-lang/rust-analyzer.git
				synced 2025-11-03 13:13:18 +00:00 
			
		
		
		
	Auto merge of #14720 - Veykril:boxed-slices, r=Veykril
internal: Use boxed slices instead ovecs in decl macros saves another 10 mb on self (since we didn't shrink the vecs)
This commit is contained in:
		
						commit
						4ecd7e6c0d
					
				@ -79,7 +79,7 @@ fn invocation_fixtures(rules: &FxHashMap<String, DeclarativeMacro>) -> Vec<(Stri
 | 
			
		||||
    let mut res = Vec::new();
 | 
			
		||||
 | 
			
		||||
    for (name, it) in rules {
 | 
			
		||||
        for rule in &it.rules {
 | 
			
		||||
        for rule in it.rules.iter() {
 | 
			
		||||
            // Generate twice
 | 
			
		||||
            for _ in 0..2 {
 | 
			
		||||
                // The input are generated by filling the `Op` randomly.
 | 
			
		||||
 | 
			
		||||
@ -104,7 +104,7 @@ impl fmt::Display for ExpandError {
 | 
			
		||||
/// and `$()*` have special meaning (see `Var` and `Repeat` data structures)
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub struct DeclarativeMacro {
 | 
			
		||||
    rules: Vec<Rule>,
 | 
			
		||||
    rules: Box<[Rule]>,
 | 
			
		||||
    /// Highest id of the token we have in TokenMap
 | 
			
		||||
    shift: Shift,
 | 
			
		||||
    // This is used for correctly determining the behavior of the pat fragment
 | 
			
		||||
@ -217,7 +217,7 @@ impl DeclarativeMacro {
 | 
			
		||||
            validate(lhs)?;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        Ok(DeclarativeMacro { rules, shift: Shift::new(tt), is_2021 })
 | 
			
		||||
        Ok(DeclarativeMacro { rules: rules.into_boxed_slice(), shift: Shift::new(tt), is_2021 })
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// The new, unstable `macro m {}` flavor.
 | 
			
		||||
@ -250,7 +250,7 @@ impl DeclarativeMacro {
 | 
			
		||||
            validate(lhs)?;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        Ok(DeclarativeMacro { rules, shift: Shift::new(tt), is_2021 })
 | 
			
		||||
        Ok(DeclarativeMacro { rules: rules.into_boxed_slice(), shift: Shift::new(tt), is_2021 })
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub fn expand(&self, tt: &tt::Subtree) -> ExpandResult<tt::Subtree> {
 | 
			
		||||
 | 
			
		||||
@ -20,7 +20,7 @@ use crate::{tt, tt_iter::TtIter, ParseError};
 | 
			
		||||
/// Stuff to the right is a [`MetaTemplate`] template which is used to produce
 | 
			
		||||
/// output.
 | 
			
		||||
#[derive(Clone, Debug, PartialEq, Eq)]
 | 
			
		||||
pub(crate) struct MetaTemplate(pub(crate) Vec<Op>);
 | 
			
		||||
pub(crate) struct MetaTemplate(pub(crate) Box<[Op]>);
 | 
			
		||||
 | 
			
		||||
impl MetaTemplate {
 | 
			
		||||
    pub(crate) fn parse_pattern(pattern: &tt::Subtree) -> Result<MetaTemplate, ParseError> {
 | 
			
		||||
@ -44,7 +44,7 @@ impl MetaTemplate {
 | 
			
		||||
            res.push(op);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        Ok(MetaTemplate(res))
 | 
			
		||||
        Ok(MetaTemplate(res.into_boxed_slice()))
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user