diff --git a/crates/oxc_parser/src/js/expression.rs b/crates/oxc_parser/src/js/expression.rs index befb73477e..1a8a086fa7 100644 --- a/crates/oxc_parser/src/js/expression.rs +++ b/crates/oxc_parser/src/js/expression.rs @@ -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) => { diff --git a/tasks/track_memory_allocations/allocs_formatter.yaml b/tasks/track_memory_allocations/allocs_formatter.yaml index 119325a879..f93fa7b817 100644 --- a/tasks/track_memory_allocations/allocs_formatter.yaml +++ b/tasks/track_memory_allocations/allocs_formatter.yaml @@ -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 diff --git a/tasks/track_memory_allocations/allocs_minifier.yaml b/tasks/track_memory_allocations/allocs_minifier.yaml index 8e4ffd9a65..59570f6fc6 100644 --- a/tasks/track_memory_allocations/allocs_minifier.yaml +++ b/tasks/track_memory_allocations/allocs_minifier.yaml @@ -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 diff --git a/tasks/track_memory_allocations/allocs_parser.yaml b/tasks/track_memory_allocations/allocs_parser.yaml index 4ff00fa629..27504cf439 100644 --- a/tasks/track_memory_allocations/allocs_parser.yaml +++ b/tasks/track_memory_allocations/allocs_parser.yaml @@ -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 diff --git a/tasks/track_memory_allocations/allocs_semantic.yaml b/tasks/track_memory_allocations/allocs_semantic.yaml index 8a1deb44cd..ee77bea2c2 100644 --- a/tasks/track_memory_allocations/allocs_semantic.yaml +++ b/tasks/track_memory_allocations/allocs_semantic.yaml @@ -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 diff --git a/tasks/track_memory_allocations/allocs_transformer.yaml b/tasks/track_memory_allocations/allocs_transformer.yaml index 7ec5c4fef7..fc466b172d 100644 --- a/tasks/track_memory_allocations/allocs_transformer.yaml +++ b/tasks/track_memory_allocations/allocs_transformer.yaml @@ -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