Skip to content

Commit f5c62fb

Browse files
authoredApr 6, 2023
fix(es/compat): Fix finally handling of generator (#7215)
**Description:** Update generator implementation to match https://github.com/microsoft/TypeScript/blob/e83d61398ea0e4231e882121dd6c6bcfe4fdc9e4/src/compiler/transformers/generators.ts **Related issue:** - Closes #5913.
1 parent 150e54d commit f5c62fb

File tree

5 files changed

+123
-210
lines changed

5 files changed

+123
-210
lines changed
 

‎crates/swc_ecma_transforms_compat/src/es2015/generator.rs

+47-3
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,16 @@ struct Wrapper {
3737
unresolved_ctxt: SyntaxContext,
3838
}
3939

40+
macro_rules! dev_span {
41+
($($tt:tt)*) => {{
42+
if cfg!(debug_assertions) {
43+
Some(tracing::span!(tracing::Level::ERROR, $($tt)*).entered())
44+
} else {
45+
None
46+
}
47+
}};
48+
}
49+
4050
impl VisitMut for Wrapper {
4151
noop_visit_mut_type!();
4252

@@ -338,7 +348,7 @@ struct Generator {
338348
clauses: Option<Vec<SwitchCase>>,
339349
stmts: Option<Vec<Stmt>>,
340350
/// Index to `blocks`
341-
exception_block_stack: Vec<Ptr<CodeBlock>>,
351+
exception_block_stack: Option<Vec<Ptr<CodeBlock>>>,
342352
/// Index to `blocks`
343353
current_exception_block: Option<Ptr<CodeBlock>>,
344354
/// Index to `blocks`
@@ -1425,6 +1435,8 @@ impl Generator {
14251435
}
14261436

14271437
fn transform_and_emit_stmt(&mut self, node: Stmt) {
1438+
let _tracing = dev_span!("transform_and_emit_stmt");
1439+
14281440
let saved_in_statement_containing_yield = self.in_statement_containing_yield;
14291441
if !self.in_statement_containing_yield {
14301442
self.in_statement_containing_yield = contains_yield(&node);
@@ -1608,6 +1620,8 @@ impl Generator {
16081620
}
16091621

16101622
fn transform_and_emit_while_stmt(&mut self, mut node: WhileStmt) {
1623+
let _tracing = dev_span!("transform_and_emit_while_stmt");
1624+
16111625
if contains_yield(&node) {
16121626
// [source]
16131627
// while (i < 10) {
@@ -1628,7 +1642,7 @@ impl Generator {
16281642
self.mark_label(loop_label);
16291643
node.test.visit_mut_with(self);
16301644
self.emit_break_when_false(end_label, node.test, None);
1631-
self.transform_and_emit_stmt(*node.body);
1645+
self.transform_and_emit_embedded_stmt(*node.body);
16321646
self.emit_break(loop_label, None);
16331647
self.end_loop_block();
16341648
} else {
@@ -2015,6 +2029,8 @@ impl Generator {
20152029
}
20162030

20172031
fn transform_and_emit_try_stmt(&mut self, mut node: TryStmt) {
2032+
let _tracing = dev_span!("transform_and_emit_try_stmt");
2033+
20182034
if contains_yield(&node) {
20192035
// [source]
20202036
// try {
@@ -2236,11 +2252,15 @@ impl Generator {
22362252
let b = block.borrow();
22372253
if let CodeBlock::With(block) = &*b {
22382254
self.mark_label(block.end_label);
2255+
} else {
2256+
unreachable!()
22392257
}
22402258
}
22412259

22422260
/// Begins a code block for a generated `try` statement.
22432261
fn begin_exception_block(&mut self) -> Label {
2262+
let _tracing = dev_span!("begin_exception_block");
2263+
22442264
let start_label = self.define_label();
22452265
let end_label = self.define_label();
22462266
self.mark_label(start_label);
@@ -2305,6 +2325,8 @@ impl Generator {
23052325

23062326
/// Enters the `finally` block of a generated `try` statement.
23072327
fn begin_finally_block(&mut self) {
2328+
let _tracing = dev_span!("begin_finally_block");
2329+
23082330
debug_assert!(self.peek_block_kind() == Some(CodeBlockKind::Exception));
23092331

23102332
let block = self.peek_block().unwrap();
@@ -2319,6 +2341,8 @@ impl Generator {
23192341
self.mark_label(finally_label);
23202342
block.state = ExceptionBlockState::Finally;
23212343
block.finally_label = Some(finally_label);
2344+
} else {
2345+
unreachable!()
23222346
}
23232347
}
23242348

@@ -2337,6 +2361,8 @@ impl Generator {
23372361
self.mark_label(block.end_label);
23382362
self.emit_nop();
23392363
block.state = ExceptionBlockState::Done;
2364+
} else {
2365+
unreachable!()
23402366
}
23412367
}
23422368

@@ -2357,6 +2383,8 @@ impl Generator {
23572383
/// - `continue_label`: A Label used to mark the operation to which to jump
23582384
/// when a `continue` statement targets this block.
23592385
fn begin_loop_block(&mut self, continue_label: Label) -> Label {
2386+
let _tracing = dev_span!("begin_loop_block");
2387+
23602388
let break_label = self.define_label();
23612389
self.begin_block(CodeBlock::Loop(LoopBlock {
23622390
is_script: false,
@@ -2377,6 +2405,8 @@ impl Generator {
23772405
if !block.is_script {
23782406
self.mark_label(break_label);
23792407
}
2408+
} else {
2409+
unreachable!()
23802410
}
23812411
}
23822412

@@ -2414,6 +2444,8 @@ impl Generator {
24142444
if !block.is_script {
24152445
self.mark_label(break_label);
24162446
}
2447+
} else {
2448+
unreachable!()
24172449
}
24182450
}
24192451

@@ -2469,6 +2501,8 @@ impl Generator {
24692501
if block.label_text == *label_text {
24702502
return true;
24712503
}
2504+
} else {
2505+
unreachable!()
24722506
}
24732507
} else {
24742508
break;
@@ -2542,6 +2576,9 @@ impl Generator {
25422576
fn create_label(&mut self, label: Option<Label>) -> Box<Expr> {
25432577
if let Some(label) = label {
25442578
if label.0 > 0 {
2579+
#[cfg(debug_assertions)]
2580+
debug!("create_label: label={:?}", label);
2581+
25452582
if self.label_exprs.is_none() {
25462583
self.label_exprs = Some(Default::default());
25472584
}
@@ -3079,13 +3116,20 @@ impl Generator {
30793116
CodeBlock::Exception(_) => {
30803117
if block_action == BlockAction::Open {
30813118
self.exception_block_stack
3119+
.get_or_insert_with(Default::default)
30823120
.extend(self.current_exception_block.clone());
30833121

3122+
// https://github.com/swc-project/swc/issues/5913
3123+
if self.stmts.is_none() {
3124+
self.stmts = Some(Default::default());
3125+
}
3126+
30843127
#[cfg(debug_assertions)]
30853128
debug!("Current exception block: open = Some({:?})", block);
30863129
self.current_exception_block = Some(block.clone());
30873130
} else if block_action == BlockAction::Close {
3088-
self.current_exception_block = self.exception_block_stack.pop();
3131+
self.current_exception_block =
3132+
self.exception_block_stack.as_mut().unwrap().pop();
30893133
#[cfg(debug_assertions)]
30903134
debug!(
30913135
"Current exception block: close = {:?}",
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
function* gen() {
2+
var firstTime = true;
3+
outer:
4+
while (true) {
5+
yield 0;
6+
try {
7+
while (true) {
8+
yield 1;
9+
if (firstTime) {
10+
firstTime = false;
11+
yield 2;
12+
continue outer;
13+
} else {
14+
yield 3;
15+
break;
16+
}
17+
}
18+
yield 4;
19+
break;
20+
} finally {
21+
yield 5;
22+
}
23+
yield 6;
24+
}
25+
yield 7;
26+
}
27+
28+
const iter = gen();
29+
console.log(iter.next())
30+
console.log(iter.next())
31+
console.log(iter.next())
32+
console.log(iter.next())
33+
console.log(iter.next())
34+
console.log(iter.next())
35+
console.log(iter.next())
36+
console.log(iter.next())
37+
console.log(iter.next())
38+
console.log(iter.next())
39+
console.log(iter.next())
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
function* generator() {
2+
try {
3+
while (true) {
4+
yield "foo";
5+
}
6+
} finally {
7+
yield "bar";
8+
}
9+
}
10+
11+
function test() {
12+
const gen = generator();
13+
console.log(gen.next().value);
14+
console.log(gen.next().value);
15+
console.log(gen.next().value);
16+
console.log(gen.next().value);
17+
}
18+
19+
test();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
function* generator() {
2+
try {
3+
while (true) {
4+
yield "foo";
5+
}
6+
} finally {
7+
}
8+
}
9+
10+
function test() {
11+
const gen = generator();
12+
console.log(gen.next().value);
13+
console.log(gen.next().value);
14+
console.log(gen.next().value);
15+
console.log(gen.next().value);
16+
}
17+
18+
test();

‎crates/swc_ecma_transforms_compat/tests/es2015_generator.rs

-207
Original file line numberDiff line numberDiff line change
@@ -1849,213 +1849,6 @@ test!(
18491849
"
18501850
);
18511851

1852-
test!(
1853-
syntax(),
1854-
|_| tr(Default::default()),
1855-
issue_1892,
1856-
r#"
1857-
function *gen() {
1858-
var firstTime = true;
1859-
outer:
1860-
while (true) {
1861-
yield 0;
1862-
try {
1863-
while (true) {
1864-
yield 1;
1865-
if (firstTime) {
1866-
firstTime = false;
1867-
yield 2;
1868-
continue outer;
1869-
} else {
1870-
yield 3;
1871-
break;
1872-
}
1873-
}
1874-
yield 4;
1875-
break;
1876-
} finally {
1877-
yield 5;
1878-
}
1879-
yield 6;
1880-
}
1881-
yield 7;
1882-
}
1883-
1884-
const iter = gen();
1885-
expect(iter.next()).toEqual({value: 0, done: false});
1886-
expect(iter.next()).toEqual({value: 1, done: false});
1887-
expect(iter.next()).toEqual({value: 2, done: false});
1888-
expect(iter.next()).toEqual({value: 5, done: false});
1889-
expect(iter.next()).toEqual({value: 0, done: false});
1890-
expect(iter.next()).toEqual({value: 1, done: false});
1891-
expect(iter.next()).toEqual({value: 3, done: false});
1892-
expect(iter.next()).toEqual({value: 4, done: false});
1893-
expect(iter.next()).toEqual({value: 5, done: false});
1894-
expect(iter.next()).toEqual({value: 7, done: false});
1895-
expect(iter.next()).toEqual({value: undefined, done: true});
1896-
1897-
"#,
1898-
r#"
1899-
function gen() {
1900-
var firstTime;
1901-
return __generator(this, function(_state) {
1902-
switch(_state.label){
1903-
case 0:
1904-
firstTime = true;
1905-
_state.label = 1;
1906-
case 1:
1907-
if (!true) return [
1908-
3,
1909-
15
1910-
];
1911-
return [
1912-
4,
1913-
0
1914-
];
1915-
case 2:
1916-
_state.sent();
1917-
_state.label = 3;
1918-
case 3:
1919-
_state.trys.push([
1920-
3,
1921-
,
1922-
11,
1923-
13
1924-
]);
1925-
if (!true) return [
1926-
3,
1927-
9
1928-
];
1929-
return [
1930-
4,
1931-
1
1932-
];
1933-
case 4:
1934-
_state.sent();
1935-
if (!firstTime) return [
1936-
3,
1937-
6
1938-
];
1939-
firstTime = false;
1940-
return [
1941-
4,
1942-
2
1943-
];
1944-
case 5:
1945-
_state.sent();
1946-
return [
1947-
3,
1948-
1
1949-
];
1950-
case 6:
1951-
return [
1952-
4,
1953-
3
1954-
];
1955-
case 7:
1956-
_state.sent();
1957-
return [
1958-
3,
1959-
9
1960-
];
1961-
case 8:
1962-
return [
1963-
3,
1964-
3
1965-
];
1966-
case 9:
1967-
return [
1968-
4,
1969-
4
1970-
];
1971-
case 10:
1972-
_state.sent();
1973-
return [
1974-
3,
1975-
15
1976-
];
1977-
case 11:
1978-
return [
1979-
4,
1980-
5
1981-
];
1982-
case 12:
1983-
_state.sent();
1984-
return [
1985-
7
1986-
];
1987-
case 13:
1988-
return [
1989-
4,
1990-
6
1991-
];
1992-
case 14:
1993-
_state.sent();
1994-
return [
1995-
3,
1996-
1
1997-
];
1998-
case 15:
1999-
return [
2000-
4,
2001-
7
2002-
];
2003-
case 16:
2004-
_state.sent();
2005-
return [
2006-
2
2007-
];
2008-
}
2009-
});
2010-
}
2011-
const iter = gen();
2012-
expect(iter.next()).toEqual({
2013-
value: 0,
2014-
done: false
2015-
});
2016-
expect(iter.next()).toEqual({
2017-
value: 1,
2018-
done: false
2019-
});
2020-
expect(iter.next()).toEqual({
2021-
value: 2,
2022-
done: false
2023-
});
2024-
expect(iter.next()).toEqual({
2025-
value: 5,
2026-
done: false
2027-
});
2028-
expect(iter.next()).toEqual({
2029-
value: 0,
2030-
done: false
2031-
});
2032-
expect(iter.next()).toEqual({
2033-
value: 1,
2034-
done: false
2035-
});
2036-
expect(iter.next()).toEqual({
2037-
value: 3,
2038-
done: false
2039-
});
2040-
expect(iter.next()).toEqual({
2041-
value: 4,
2042-
done: false
2043-
});
2044-
expect(iter.next()).toEqual({
2045-
value: 5,
2046-
done: false
2047-
});
2048-
expect(iter.next()).toEqual({
2049-
value: 7,
2050-
done: false
2051-
});
2052-
expect(iter.next()).toEqual({
2053-
value: undefined,
2054-
done: true
2055-
});
2056-
"#
2057-
);
2058-
20591852
test!(
20601853
Syntax::default(),
20611854
|_| {

1 commit comments

Comments
 (1)

github-actions[bot] commented on Apr 6, 2023

@github-actions[bot]

Benchmark

Benchmark suite Current: f5c62fb Previous: 29bf176 Ratio
es/full/bugs-1 297887 ns/iter (± 8273) 313216 ns/iter (± 19124) 0.95
es/full/minify/libraries/antd 1708675716 ns/iter (± 13080524) 1718337751 ns/iter (± 21939043) 0.99
es/full/minify/libraries/d3 321163144 ns/iter (± 5263550) 322602712 ns/iter (± 13295432) 1.00
es/full/minify/libraries/echarts 1299586608 ns/iter (± 17548868) 1301575524 ns/iter (± 7647533) 1.00
es/full/minify/libraries/jquery 94303220 ns/iter (± 1961968) 93505495 ns/iter (± 1963386) 1.01
es/full/minify/libraries/lodash 107963576 ns/iter (± 1454116) 109557504 ns/iter (± 2040503) 0.99
es/full/minify/libraries/moment 53652203 ns/iter (± 1210034) 53737654 ns/iter (± 487012) 1.00
es/full/minify/libraries/react 19886759 ns/iter (± 354004) 19356310 ns/iter (± 269376) 1.03
es/full/minify/libraries/terser 263167151 ns/iter (± 2630864) 261999112 ns/iter (± 5986185) 1.00
es/full/minify/libraries/three 473532528 ns/iter (± 12770710) 473190603 ns/iter (± 9015928) 1.00
es/full/minify/libraries/typescript 3179197425 ns/iter (± 10945685) 3157048692 ns/iter (± 29360778) 1.01
es/full/minify/libraries/victory 723331835 ns/iter (± 10793945) 710037195 ns/iter (± 10173852) 1.02
es/full/minify/libraries/vue 137598976 ns/iter (± 1870970) 135142259 ns/iter (± 2261328) 1.02
es/full/codegen/es3 28741 ns/iter (± 53) 28546 ns/iter (± 108) 1.01
es/full/codegen/es5 28885 ns/iter (± 39) 28539 ns/iter (± 77) 1.01
es/full/codegen/es2015 28753 ns/iter (± 73) 28559 ns/iter (± 67) 1.01
es/full/codegen/es2016 28808 ns/iter (± 57) 28633 ns/iter (± 53) 1.01
es/full/codegen/es2017 28858 ns/iter (± 52) 28583 ns/iter (± 60) 1.01
es/full/codegen/es2018 28818 ns/iter (± 50) 28598 ns/iter (± 107) 1.01
es/full/codegen/es2019 28775 ns/iter (± 75) 28581 ns/iter (± 55) 1.01
es/full/codegen/es2020 28829 ns/iter (± 35) 28604 ns/iter (± 56) 1.01
es/full/all/es3 183526999 ns/iter (± 2257301) 183341317 ns/iter (± 3307410) 1.00
es/full/all/es5 172080995 ns/iter (± 2643161) 170774806 ns/iter (± 3576268) 1.01
es/full/all/es2015 135003859 ns/iter (± 1594732) 135627928 ns/iter (± 2645015) 1.00
es/full/all/es2016 132372915 ns/iter (± 2447110) 134293127 ns/iter (± 1583264) 0.99
es/full/all/es2017 129660010 ns/iter (± 1942841) 131926852 ns/iter (± 2894526) 0.98
es/full/all/es2018 126265145 ns/iter (± 996973) 127290224 ns/iter (± 2445613) 0.99
es/full/all/es2019 125649432 ns/iter (± 2009867) 124988799 ns/iter (± 1867643) 1.01
es/full/all/es2020 118347273 ns/iter (± 1909621) 118626800 ns/iter (± 1678973) 1.00
es/full/parser 518673 ns/iter (± 9770) 519944 ns/iter (± 8497) 1.00
es/full/base/fixer 22450 ns/iter (± 36) 23908 ns/iter (± 44) 0.94
es/full/base/resolver_and_hygiene 84658 ns/iter (± 80) 86798 ns/iter (± 119) 0.98
serialization of serde 121 ns/iter (± 0) 121 ns/iter (± 0) 1
css/minify/libraries/bootstrap 28130545 ns/iter (± 135161) 28053072 ns/iter (± 96641) 1.00
css/visitor/compare/clone 2111513 ns/iter (± 9402) 2125911 ns/iter (± 13255) 0.99
css/visitor/compare/visit_mut_span 2322442 ns/iter (± 5156) 2328496 ns/iter (± 7794) 1.00
css/visitor/compare/visit_mut_span_panic 2365179 ns/iter (± 8564) 2375483 ns/iter (± 13318) 1.00
css/visitor/compare/fold_span 3072558 ns/iter (± 23811) 3097449 ns/iter (± 13512) 0.99
css/visitor/compare/fold_span_panic 3242183 ns/iter (± 23156) 3299278 ns/iter (± 25789) 0.98
css/lexer/bootstrap_5_1_3 5135530 ns/iter (± 12780) 5138769 ns/iter (± 13598) 1.00
css/lexer/foundation_6_7_4 4307869 ns/iter (± 960) 4347796 ns/iter (± 1110) 0.99
css/lexer/tailwind_3_1_1 822698 ns/iter (± 202) 829645 ns/iter (± 450) 0.99
css/parser/bootstrap_5_1_3 21581385 ns/iter (± 208820) 21848205 ns/iter (± 136802) 0.99
css/parser/foundation_6_7_4 17116520 ns/iter (± 133353) 17310432 ns/iter (± 96648) 0.99
css/parser/tailwind_3_1_1 3224638 ns/iter (± 6829) 3239811 ns/iter (± 2718) 1.00
es/codegen/colors 318029 ns/iter (± 179230) 319205 ns/iter (± 179048) 1.00
es/codegen/large 1258294 ns/iter (± 651243) 1254491 ns/iter (± 666075) 1.00
es/codegen/with-parser/colors 46567 ns/iter (± 88) 46525 ns/iter (± 86) 1.00
es/codegen/with-parser/large 503813 ns/iter (± 1532) 502923 ns/iter (± 912) 1.00
es/minify/libraries/antd 1504513671 ns/iter (± 17929336) 1492444067 ns/iter (± 15183991) 1.01
es/minify/libraries/d3 274374253 ns/iter (± 4459809) 276374858 ns/iter (± 5129867) 0.99
es/minify/libraries/echarts 1138249606 ns/iter (± 6773480) 1142937029 ns/iter (± 9012060) 1.00
es/minify/libraries/jquery 81749266 ns/iter (± 1249613) 81547685 ns/iter (± 1028406) 1.00
es/minify/libraries/lodash 98468601 ns/iter (± 1260674) 98908271 ns/iter (± 1578756) 1.00
es/minify/libraries/moment 47098950 ns/iter (± 677657) 46560353 ns/iter (± 386548) 1.01
es/minify/libraries/react 17545694 ns/iter (± 194147) 17419336 ns/iter (± 219082) 1.01
es/minify/libraries/terser 223168919 ns/iter (± 3181756) 226215390 ns/iter (± 3096409) 0.99
es/minify/libraries/three 390705776 ns/iter (± 4105785) 395828764 ns/iter (± 9566426) 0.99
es/minify/libraries/typescript 2695322893 ns/iter (± 17622984) 2667650481 ns/iter (± 23697600) 1.01
es/minify/libraries/victory 620851839 ns/iter (± 16523072) 633714352 ns/iter (± 9791495) 0.98
es/minify/libraries/vue 120318793 ns/iter (± 1898591) 120631536 ns/iter (± 997190) 1.00
es/visitor/compare/clone 2336631 ns/iter (± 12999) 2332782 ns/iter (± 7453) 1.00
es/visitor/compare/visit_mut_span 2725236 ns/iter (± 14548) 2716574 ns/iter (± 6591) 1.00
es/visitor/compare/visit_mut_span_panic 2731612 ns/iter (± 6985) 2752112 ns/iter (± 18688) 0.99
es/visitor/compare/fold_span 3823444 ns/iter (± 24843) 3875822 ns/iter (± 33370) 0.99
es/visitor/compare/fold_span_panic 3940480 ns/iter (± 13576) 3978344 ns/iter (± 29677) 0.99
es/lexer/colors 13019 ns/iter (± 22) 12927 ns/iter (± 65) 1.01
es/lexer/angular 6362582 ns/iter (± 2938) 6325567 ns/iter (± 7284) 1.01
es/lexer/backbone 786193 ns/iter (± 529) 779221 ns/iter (± 223) 1.01
es/lexer/jquery 4399706 ns/iter (± 2024) 4359274 ns/iter (± 2843) 1.01
es/lexer/jquery mobile 6876206 ns/iter (± 16021) 6801831 ns/iter (± 2043) 1.01
es/lexer/mootools 3437768 ns/iter (± 919) 3423194 ns/iter (± 13578) 1.00
es/lexer/underscore 651970 ns/iter (± 362) 643450 ns/iter (± 230) 1.01
es/lexer/three 20890317 ns/iter (± 21722) 20742346 ns/iter (± 22761) 1.01
es/lexer/yui 3848842 ns/iter (± 1640) 3832499 ns/iter (± 1507) 1.00
es/parser/colors 28583 ns/iter (± 49) 28628 ns/iter (± 42) 1.00
es/parser/angular 15468261 ns/iter (± 281269) 15393043 ns/iter (± 179118) 1.00
es/parser/backbone 2166518 ns/iter (± 11617) 2163715 ns/iter (± 14116) 1.00
es/parser/jquery 11983384 ns/iter (± 134984) 11963110 ns/iter (± 120330) 1.00
es/parser/jquery mobile 19813218 ns/iter (± 385209) 19088144 ns/iter (± 261323) 1.04
es/parser/mootools 8920781 ns/iter (± 30897) 8878811 ns/iter (± 31614) 1.00
es/parser/underscore 1826987 ns/iter (± 9398) 1831705 ns/iter (± 11122) 1.00
es/parser/three 56264827 ns/iter (± 432888) 56312628 ns/iter (± 246064) 1.00
es/parser/yui 9230184 ns/iter (± 176190) 9102650 ns/iter (± 62468) 1.01
es/preset-env/usage/builtin_type 146580 ns/iter (± 35619) 143185 ns/iter (± 33785) 1.02
es/preset-env/usage/property 21624 ns/iter (± 85) 21006 ns/iter (± 85) 1.03
es/resolver/typescript 123783041 ns/iter (± 1513865) 122063215 ns/iter (± 3675970) 1.01
es/fixer/typescript 89765977 ns/iter (± 834325) 88314191 ns/iter (± 2125323) 1.02
es/hygiene/typescript 194858886 ns/iter (± 2169915) 189908825 ns/iter (± 2398242) 1.03
es/resolver_with_hygiene/typescript 352700820 ns/iter (± 1618185) 340671684 ns/iter (± 1953378) 1.04
es/visitor/base-perf/module_clone 80369 ns/iter (± 941) 80464 ns/iter (± 407) 1.00
es/visitor/base-perf/fold_empty 90071 ns/iter (± 349) 90677 ns/iter (± 428) 0.99
es/visitor/base-perf/fold_noop_impl_all 90706 ns/iter (± 431) 90806 ns/iter (± 275) 1.00
es/visitor/base-perf/fold_noop_impl_vec 91284 ns/iter (± 544) 91371 ns/iter (± 349) 1.00
es/visitor/base-perf/boxing_boxed_clone 57 ns/iter (± 0) 56 ns/iter (± 0) 1.02
es/visitor/base-perf/boxing_unboxed_clone 41 ns/iter (± 0) 41 ns/iter (± 0) 1
es/visitor/base-perf/boxing_boxed 103 ns/iter (± 0) 101 ns/iter (± 0) 1.02
es/visitor/base-perf/boxing_unboxed 78 ns/iter (± 0) 78 ns/iter (± 0) 1
es/visitor/base-perf/visit_contains_this 3359 ns/iter (± 58) 3373 ns/iter (± 57) 1.00
es/base/parallel/resolver/typescript 6721082482 ns/iter (± 417118607) 6599639811 ns/iter (± 654346091) 1.02
es/base/parallel/hygiene/typescript 2211318464 ns/iter (± 9873068) 2219663313 ns/iter (± 26072352) 1.00
misc/visitors/time-complexity/time 5 103 ns/iter (± 0) 102 ns/iter (± 0) 1.01
misc/visitors/time-complexity/time 10 349 ns/iter (± 0) 342 ns/iter (± 6) 1.02
misc/visitors/time-complexity/time 15 666 ns/iter (± 9) 669 ns/iter (± 17) 1.00
misc/visitors/time-complexity/time 20 1259 ns/iter (± 19) 1240 ns/iter (± 0) 1.02
misc/visitors/time-complexity/time 40 6893 ns/iter (± 4) 6925 ns/iter (± 7) 1.00
misc/visitors/time-complexity/time 60 17164 ns/iter (± 90) 17227 ns/iter (± 117) 1.00
es/full-target/es2016 252029 ns/iter (± 870) 252336 ns/iter (± 3079) 1.00
es/full-target/es2017 245172 ns/iter (± 324) 245315 ns/iter (± 326) 1.00
es/full-target/es2018 234157 ns/iter (± 279) 235095 ns/iter (± 239) 1.00
es2020_nullish_coalescing 93262 ns/iter (± 379) 95002 ns/iter (± 238) 0.98
es2020_optional_chaining 124375 ns/iter (± 377) 124228 ns/iter (± 244) 1.00
es2022_class_properties 148638 ns/iter (± 283) 148265 ns/iter (± 267) 1.00
es2018_object_rest_spread 96676 ns/iter (± 249) 96044 ns/iter (± 220) 1.01
es2019_optional_catch_binding 85489 ns/iter (± 237) 85416 ns/iter (± 148) 1.00
es2017_async_to_generator 85988 ns/iter (± 234) 85927 ns/iter (± 151) 1.00
es2016_exponentiation 90318 ns/iter (± 401) 90380 ns/iter (± 187) 1.00
es2015_arrow 94076 ns/iter (± 276) 93784 ns/iter (± 179) 1.00
es2015_block_scoped_fn 92430 ns/iter (± 383) 92013 ns/iter (± 243) 1.00
es2015_block_scoping 169865 ns/iter (± 274) 170411 ns/iter (± 196) 1.00

This comment was automatically generated by workflow using github-action-benchmark.

Please sign in to comment.