mirror of
https://github.com/oxc-project/oxc.git
synced 2026-11-04 10:29:58 +00:00
perf(parser): avoid vectors for single parenthesized expressions (#28374)
Avoid allocating a temporary arena vector for a single parenthesized expression. Depends on #28373. AI-assisted implementation.
This commit is contained in:
1 parent
50bd0a951a
commit
c2d663de29
6 files changed
+59
-51
No files matched your search
@@ -322,13 +322,30 @@ impl<'a, C: Config> ParserImpl<'a, C> {
|
||||
self.lexer.trivia_builder.previous_token_no_side_effects_comments();
|
||||
self.bump_any(); // `bump` `(`
|
||||
let expr_start = self.cur_start();
|
||||
let (mut expressions, comma_start) = self.context(Context::In, Context::Decorator, |p| {
|
||||
p.parse_delimited_list(
|
||||
let (expression, comma_start) = self.context(Context::In, Context::Decorator, |p| {
|
||||
if p.at(Kind::RParen) || p.has_fatal_error() {
|
||||
return (None, None);
|
||||
}
|
||||
let first = p.parse_assignment_expression_or_higher();
|
||||
// A single parenthesized expression does not need a temporary arena vector.
|
||||
if p.at(Kind::RParen) || p.has_fatal_error() {
|
||||
return (Some(first), None);
|
||||
}
|
||||
let mut expressions = ArenaVec::with_capacity_in(2, p);
|
||||
expressions.push(first);
|
||||
let comma_start = p.parse_delimited_list_rest(
|
||||
&mut expressions,
|
||||
Kind::RParen,
|
||||
Kind::Comma,
|
||||
opening_span,
|
||||
Self::parse_assignment_expression_or_higher,
|
||||
)
|
||||
);
|
||||
let expression = if expressions.len() == 1 {
|
||||
expressions.remove(0)
|
||||
} else {
|
||||
Expression::new_sequence_expression(p.end_span(expr_start), expressions, p)
|
||||
};
|
||||
(Some(expression), comma_start)
|
||||
});
|
||||
|
||||
if let Some(comma_start) = comma_start {
|
||||
@@ -339,21 +356,12 @@ impl<'a, C: Config> ParserImpl<'a, C> {
|
||||
return self.fatal_error(error);
|
||||
}
|
||||
|
||||
if expressions.is_empty() {
|
||||
let Some(mut expression) = expression else {
|
||||
self.expect(Kind::RParen);
|
||||
let error = diagnostics::empty_parenthesized_expression(self.end_span(start));
|
||||
return self.fatal_error(error);
|
||||
}
|
||||
|
||||
let expr_span = self.end_span(expr_start);
|
||||
self.expect(Kind::RParen);
|
||||
|
||||
// ParenthesizedExpression is from acorn --preserveParens
|
||||
let mut expression = if expressions.len() == 1 {
|
||||
expressions.remove(0)
|
||||
} else {
|
||||
Expression::new_sequence_expression(expr_span, expressions, self)
|
||||
};
|
||||
self.expect(Kind::RParen);
|
||||
|
||||
match &mut expression {
|
||||
Expression::ArrowFunctionExpression(arrow_expr) => {
|
||||
|
||||
@@ -7,7 +7,7 @@ checker.ts:
|
||||
sys peak growth: 2973842 # 2.97 MB
|
||||
arena allocs: 36968
|
||||
arena reallocs: 927
|
||||
arena size: 38546952 # 38.55 MB
|
||||
arena size: 38503224 # 38.50 MB
|
||||
|
||||
App.tsx:
|
||||
file size: 415342 # 415.34 kB
|
||||
@@ -18,7 +18,7 @@ App.tsx:
|
||||
sys peak growth: 435478 # 435.48 kB
|
||||
arena allocs: 11511
|
||||
arena reallocs: 362
|
||||
arena size: 7071288 # 7.07 MB
|
||||
arena size: 7067944 # 7.07 MB
|
||||
|
||||
RadixUIAdoptionSection.jsx:
|
||||
file size: 2520 # 2.52 kB
|
||||
@@ -40,7 +40,7 @@ pdf.mjs:
|
||||
sys peak growth: 1156488 # 1.16 MB
|
||||
arena allocs: 21652
|
||||
arena reallocs: 402
|
||||
arena size: 11012784 # 11.01 MB
|
||||
arena size: 11006048 # 11.01 MB
|
||||
|
||||
antd.js:
|
||||
file size: 6686316 # 6.69 MB
|
||||
@@ -51,7 +51,7 @@ antd.js:
|
||||
sys peak growth: 13710144 # 13.71 MB
|
||||
arena allocs: 120676
|
||||
arena reallocs: 1889
|
||||
arena size: 114439144 # 114.44 MB
|
||||
arena size: 114354248 # 114.35 MB
|
||||
|
||||
binder.ts:
|
||||
file size: 193077 # 193.08 kB
|
||||
@@ -62,7 +62,7 @@ binder.ts:
|
||||
sys peak growth: 195197 # 195.20 kB
|
||||
arena allocs: 2092
|
||||
arena reallocs: 38
|
||||
arena size: 2539336 # 2.54 MB
|
||||
arena size: 2537384 # 2.54 MB
|
||||
|
||||
kitchen-sink.tsx:
|
||||
file size: 732898 # 732.90 kB
|
||||
@@ -73,4 +73,4 @@ kitchen-sink.tsx:
|
||||
sys peak growth: 1491884 # 1.49 MB
|
||||
arena allocs: 30654
|
||||
arena reallocs: 975
|
||||
arena size: 14548696 # 14.55 MB
|
||||
arena size: 14537304 # 14.54 MB
|
||||
@@ -7,7 +7,7 @@ checker.ts:
|
||||
sys peak growth: 10169560 # 10.17 MB
|
||||
arena allocs: 56228
|
||||
arena reallocs: 5084
|
||||
arena size: 16382912 # 16.38 MB
|
||||
arena size: 16339184 # 16.34 MB
|
||||
|
||||
App.tsx:
|
||||
file size: 415342 # 415.34 kB
|
||||
@@ -18,7 +18,7 @@ App.tsx:
|
||||
sys peak growth: 1612427 # 1.61 MB
|
||||
arena allocs: 7729
|
||||
arena reallocs: 920
|
||||
arena size: 2767000 # 2.77 MB
|
||||
arena size: 2763656 # 2.76 MB
|
||||
|
||||
RadixUIAdoptionSection.jsx:
|
||||
file size: 2520 # 2.52 kB
|
||||
@@ -40,7 +40,7 @@ pdf.mjs:
|
||||
sys peak growth: 3693355 # 3.69 MB
|
||||
arena allocs: 19582
|
||||
arena reallocs: 2574
|
||||
arena size: 5691208 # 5.69 MB
|
||||
arena size: 5684472 # 5.68 MB
|
||||
|
||||
antd.js:
|
||||
file size: 6686316 # 6.69 MB
|
||||
@@ -51,7 +51,7 @@ antd.js:
|
||||
sys peak growth: 19934725 # 19.93 MB
|
||||
arena allocs: 175842
|
||||
arena reallocs: 34169
|
||||
arena size: 43723680 # 43.72 MB
|
||||
arena size: 43638784 # 43.64 MB
|
||||
|
||||
binder.ts:
|
||||
file size: 193077 # 193.08 kB
|
||||
@@ -62,7 +62,7 @@ binder.ts:
|
||||
sys peak growth: 657404 # 657.40 kB
|
||||
arena allocs: 2930
|
||||
arena reallocs: 244
|
||||
arena size: 1086224 # 1.09 MB
|
||||
arena size: 1084272 # 1.08 MB
|
||||
|
||||
kitchen-sink.tsx:
|
||||
file size: 732898 # 732.90 kB
|
||||
@@ -73,4 +73,4 @@ kitchen-sink.tsx:
|
||||
sys peak growth: 3707425 # 3.71 MB
|
||||
arena allocs: 31100
|
||||
arena reallocs: 3011
|
||||
arena size: 8413432 # 8.41 MB
|
||||
arena size: 8402040 # 8.40 MB
|
||||
@@ -5,9 +5,9 @@ checker.ts:
|
||||
sys deallocs: 19
|
||||
sys alloc bytes: 4820 # 4.82 kB
|
||||
sys peak growth: 2432 # 2.43 kB
|
||||
arena allocs: 262590
|
||||
arena allocs: 259857
|
||||
arena reallocs: 15233
|
||||
arena size: 12936672 # 12.94 MB
|
||||
arena size: 12892944 # 12.89 MB
|
||||
|
||||
App.tsx:
|
||||
file size: 415342 # 415.34 kB
|
||||
@@ -16,9 +16,9 @@ App.tsx:
|
||||
sys deallocs: 18
|
||||
sys alloc bytes: 4348 # 4.35 kB
|
||||
sys peak growth: 1868 # 1.87 kB
|
||||
arena allocs: 44037
|
||||
arena allocs: 43828
|
||||
arena reallocs: 2263
|
||||
arena size: 2231808 # 2.23 MB
|
||||
arena size: 2228464 # 2.23 MB
|
||||
|
||||
RadixUIAdoptionSection.jsx:
|
||||
file size: 2520 # 2.52 kB
|
||||
@@ -27,7 +27,7 @@ RadixUIAdoptionSection.jsx:
|
||||
sys deallocs: 1
|
||||
sys alloc bytes: 108 # 108 B
|
||||
sys peak growth: 108 # 108 B
|
||||
arena allocs: 367
|
||||
arena allocs: 366
|
||||
arena reallocs: 58
|
||||
arena size: 21200 # 21.20 kB
|
||||
|
||||
@@ -38,9 +38,9 @@ pdf.mjs:
|
||||
sys deallocs: 67
|
||||
sys alloc bytes: 24020 # 24.02 kB
|
||||
sys peak growth: 12140 # 12.14 kB
|
||||
arena allocs: 89857
|
||||
arena allocs: 89436
|
||||
arena reallocs: 5904
|
||||
arena size: 4517312 # 4.52 MB
|
||||
arena size: 4510576 # 4.51 MB
|
||||
|
||||
antd.js:
|
||||
file size: 6686316 # 6.69 MB
|
||||
@@ -49,9 +49,9 @@ antd.js:
|
||||
sys deallocs: 185
|
||||
sys alloc bytes: 109952 # 109.95 kB
|
||||
sys peak growth: 48264 # 48.26 kB
|
||||
arena allocs: 528577
|
||||
arena allocs: 523271
|
||||
arena reallocs: 35629
|
||||
arena size: 30154616 # 30.15 MB
|
||||
arena size: 30069720 # 30.07 MB
|
||||
|
||||
binder.ts:
|
||||
file size: 193077 # 193.08 kB
|
||||
@@ -60,9 +60,9 @@ binder.ts:
|
||||
sys deallocs: 0
|
||||
sys alloc bytes: 3016 # 3.02 kB
|
||||
sys peak growth: 251 # 251 B
|
||||
arena allocs: 16587
|
||||
arena allocs: 16465
|
||||
arena reallocs: 1093
|
||||
arena size: 917920 # 917.92 kB
|
||||
arena size: 915968 # 915.97 kB
|
||||
|
||||
kitchen-sink.tsx:
|
||||
file size: 732898 # 732.90 kB
|
||||
@@ -71,6 +71,6 @@ kitchen-sink.tsx:
|
||||
sys deallocs: 183
|
||||
sys alloc bytes: 34053 # 34.05 kB
|
||||
sys peak growth: 3892 # 3.89 kB
|
||||
arena allocs: 136453
|
||||
arena allocs: 135741
|
||||
arena reallocs: 8759
|
||||
arena size: 6409648 # 6.41 MB
|
||||
arena size: 6398256 # 6.40 MB
|
||||
@@ -7,7 +7,7 @@ checker.ts:
|
||||
sys peak growth: 3858362 # 3.86 MB
|
||||
arena allocs: 0
|
||||
arena reallocs: 0
|
||||
arena size: 12936672 # 12.94 MB
|
||||
arena size: 12892944 # 12.89 MB
|
||||
|
||||
App.tsx:
|
||||
file size: 415342 # 415.34 kB
|
||||
@@ -18,7 +18,7 @@ App.tsx:
|
||||
sys peak growth: 360848 # 360.85 kB
|
||||
arena allocs: 0
|
||||
arena reallocs: 0
|
||||
arena size: 2231808 # 2.23 MB
|
||||
arena size: 2228464 # 2.23 MB
|
||||
|
||||
RadixUIAdoptionSection.jsx:
|
||||
file size: 2520 # 2.52 kB
|
||||
@@ -40,7 +40,7 @@ pdf.mjs:
|
||||
sys peak growth: 832762 # 832.76 kB
|
||||
arena allocs: 0
|
||||
arena reallocs: 0
|
||||
arena size: 4517312 # 4.52 MB
|
||||
arena size: 4510576 # 4.51 MB
|
||||
|
||||
antd.js:
|
||||
file size: 6686316 # 6.69 MB
|
||||
@@ -51,7 +51,7 @@ antd.js:
|
||||
sys peak growth: 5441278 # 5.44 MB
|
||||
arena allocs: 0
|
||||
arena reallocs: 0
|
||||
arena size: 30154616 # 30.15 MB
|
||||
arena size: 30069720 # 30.07 MB
|
||||
|
||||
binder.ts:
|
||||
file size: 193077 # 193.08 kB
|
||||
@@ -62,7 +62,7 @@ binder.ts:
|
||||
sys peak growth: 246886 # 246.89 kB
|
||||
arena allocs: 0
|
||||
arena reallocs: 0
|
||||
arena size: 917920 # 917.92 kB
|
||||
arena size: 915968 # 915.97 kB
|
||||
|
||||
kitchen-sink.tsx:
|
||||
file size: 732898 # 732.90 kB
|
||||
@@ -73,4 +73,4 @@ kitchen-sink.tsx:
|
||||
sys peak growth: 1101954 # 1.10 MB
|
||||
arena allocs: 0
|
||||
arena reallocs: 0
|
||||
arena size: 6409648 # 6.41 MB
|
||||
arena size: 6398256 # 6.40 MB
|
||||
@@ -7,7 +7,7 @@ checker.ts:
|
||||
sys peak growth: 2243 # 2.24 kB
|
||||
arena allocs: 1959
|
||||
arena reallocs: 5
|
||||
arena size: 13025128 # 13.03 MB
|
||||
arena size: 12981400 # 12.98 MB
|
||||
|
||||
App.tsx:
|
||||
file size: 415342 # 415.34 kB
|
||||
@@ -18,7 +18,7 @@ App.tsx:
|
||||
sys peak growth: 2584 # 2.58 kB
|
||||
arena allocs: 618
|
||||
arena reallocs: 17
|
||||
arena size: 2265096 # 2.27 MB
|
||||
arena size: 2261752 # 2.26 MB
|
||||
|
||||
RadixUIAdoptionSection.jsx:
|
||||
file size: 2520 # 2.52 kB
|
||||
@@ -40,7 +40,7 @@ pdf.mjs:
|
||||
sys peak growth: 1610 # 1.61 kB
|
||||
arena allocs: 2
|
||||
arena reallocs: 0
|
||||
arena size: 4517336 # 4.52 MB
|
||||
arena size: 4510600 # 4.51 MB
|
||||
|
||||
antd.js:
|
||||
file size: 6686316 # 6.69 MB
|
||||
@@ -51,7 +51,7 @@ antd.js:
|
||||
sys peak growth: 1611 # 1.61 kB
|
||||
arena allocs: 2
|
||||
arena reallocs: 0
|
||||
arena size: 30154640 # 30.15 MB
|
||||
arena size: 30069744 # 30.07 MB
|
||||
|
||||
binder.ts:
|
||||
file size: 193077 # 193.08 kB
|
||||
@@ -62,7 +62,7 @@ binder.ts:
|
||||
sys peak growth: 1625 # 1.62 kB
|
||||
arena allocs: 154
|
||||
arena reallocs: 0
|
||||
arena size: 924600 # 924.60 kB
|
||||
arena size: 922648 # 922.65 kB
|
||||
|
||||
kitchen-sink.tsx:
|
||||
file size: 732898 # 732.90 kB
|
||||
@@ -73,4 +73,4 @@ kitchen-sink.tsx:
|
||||
sys peak growth: 3218 # 3.22 kB
|
||||
arena allocs: 6132
|
||||
arena reallocs: 280
|
||||
arena size: 6743744 # 6.74 MB
|
||||
arena size: 6732352 # 6.73 MB
|
||||
Reference in new issue
Block a user