Box ImportPattern in Expr (#12568)

# Description
Adds a `Box` around the `ImportPattern` in `Expr` which decreases the
size of `Expr` from 152 to 64 bytes (and `Expression` from 216 to 128
bytes). This seems to speed up parsing a little bit according to the
benchmarks (main is top, PR is bottom):
```
benchmarks                       fastest       │ slowest       │ median        │ mean          │ samples │ iters
benchmarks                       fastest       │ slowest       │ median        │ mean          │ samples │ iters
├─ parser_benchmarks                           │               │               │               │         │
├─ parser_benchmarks                           │               │               │               │         │
│  ├─ parse_default_config_file  2.287 ms      │ 4.532 ms      │ 2.311 ms      │ 2.437 ms      │ 100     │ 100
│  ├─ parse_default_config_file  2.255 ms      │ 2.781 ms      │ 2.281 ms      │ 2.312 ms      │ 100     │ 100
│  ╰─ parse_default_env_file     421.8 µs      │ 824.6 µs      │ 494.3 µs      │ 527.5 µs      │ 100     │ 100
│  ╰─ parse_default_env_file     402 µs        │ 486.6 µs      │ 414.8 µs      │ 416.2 µs      │ 100     │ 100

```
This commit is contained in:
Ian Manske 2024-04-18 15:57:01 +00:00 committed by GitHub
parent b088f395dc
commit 9a265847e2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 7 additions and 7 deletions

View file

@ -2431,7 +2431,7 @@ pub fn parse_use(
// Create a new Use command call to pass the import pattern as parser info
let import_pattern_expr = Expression {
expr: Expr::ImportPattern(import_pattern),
expr: Expr::ImportPattern(Box::new(import_pattern)),
span: span(args_spans),
ty: Type::Any,
custom_completion: None,
@ -2615,7 +2615,7 @@ pub fn parse_hide(working_set: &mut StateWorkingSet, lite_command: &LiteCommand)
// Create a new Use command call to pass the new import pattern
let import_pattern_expr = Expression {
expr: Expr::ImportPattern(import_pattern),
expr: Expr::ImportPattern(Box::new(import_pattern)),
span: span(args_spans),
ty: Type::Any,
custom_completion: None,

View file

@ -2782,7 +2782,7 @@ pub fn parse_import_pattern(working_set: &mut StateWorkingSet, spans: &[Span]) -
prev_span,
));
return Expression {
expr: Expr::ImportPattern(import_pattern),
expr: Expr::ImportPattern(Box::new(import_pattern)),
span: prev_span,
ty: Type::List(Box::new(Type::String)),
custom_completion: None,
@ -2828,7 +2828,7 @@ pub fn parse_import_pattern(working_set: &mut StateWorkingSet, spans: &[Span]) -
} else {
working_set.error(ParseError::ExportNotFound(result.span));
return Expression {
expr: Expr::ImportPattern(import_pattern),
expr: Expr::ImportPattern(Box::new(import_pattern)),
span: span(spans),
ty: Type::List(Box::new(Type::String)),
custom_completion: None,
@ -2848,7 +2848,7 @@ pub fn parse_import_pattern(working_set: &mut StateWorkingSet, spans: &[Span]) -
}
Expression {
expr: Expr::ImportPattern(import_pattern),
expr: Expr::ImportPattern(Box::new(import_pattern)),
span: span(&spans[1..]),
ty: Type::List(Box::new(Type::String)),
custom_completion: None,

View file

@ -46,7 +46,7 @@ pub enum Expr {
String(String),
CellPath(CellPath),
FullCellPath(Box<FullCellPath>),
ImportPattern(ImportPattern),
ImportPattern(Box<ImportPattern>),
Overlay(Option<BlockId>), // block ID of the overlay's origin module
Signature(Box<Signature>),
StringInterpolation(Vec<Expression>),

View file

@ -110,7 +110,7 @@ impl Expression {
pub fn as_import_pattern(&self) -> Option<ImportPattern> {
match &self.expr {
Expr::ImportPattern(pattern) => Some(pattern.clone()),
Expr::ImportPattern(pattern) => Some(*pattern.clone()),
_ => None,
}
}