Skip to content

Commit

Permalink
feat(es/resolver): Make scope context identical to the vars (#7095)
Browse files Browse the repository at this point in the history
  • Loading branch information
Austaras committed Mar 19, 2023
1 parent 4006df1 commit 0f09e35
Show file tree
Hide file tree
Showing 66 changed files with 757 additions and 804 deletions.
3 changes: 1 addition & 2 deletions crates/swc_ecma_minifier/src/lib.rs
Expand Up @@ -46,7 +46,7 @@ use swc_ecma_usage_analyzer::marks::Marks;
use swc_ecma_visit::VisitMutWith;
use swc_timer::timer;

pub use crate::pass::{global_defs::globals_defs, unique_scope::unique_scope};
pub use crate::pass::global_defs::globals_defs;
use crate::{
compress::{compressor, pure_optimizer, PureOptimizerConfig},
metadata::info_marker,
Expand Down Expand Up @@ -178,7 +178,6 @@ pub fn optimize(
));
debug_assert_valid(&n);
}
n.visit_mut_with(&mut unique_scope());

if options.wrap {
// TODO: wrap_common_js
Expand Down
1 change: 0 additions & 1 deletion crates/swc_ecma_minifier/src/pass/mod.rs
Expand Up @@ -5,4 +5,3 @@ pub mod mangle_props;
pub mod merge_exports;
pub mod postcompress;
pub mod precompress;
pub mod unique_scope;
40 changes: 0 additions & 40 deletions crates/swc_ecma_minifier/src/pass/unique_scope.rs

This file was deleted.

75 changes: 38 additions & 37 deletions crates/swc_ecma_transforms_base/src/resolver/mod.rs
Expand Up @@ -2,7 +2,7 @@ use rustc_hash::FxHashSet;
use swc_atoms::{js_word, JsWord};
use swc_common::{
collections::{AHashMap, AHashSet},
Mark, SyntaxContext,
Mark, Span, SyntaxContext,
};
use swc_ecma_ast::*;
use swc_ecma_utils::{find_pat_ids, IsDirective};
Expand Down Expand Up @@ -251,18 +251,13 @@ impl<'a> Resolver<'a> {
}

fn visit_mut_stmt_within_child_scope(&mut self, s: &mut Stmt) {
self.with_child(ScopeKind::Block, |child| {
child.visit_mut_stmt_within_same_scope(s)
});
}

fn visit_mut_stmt_within_same_scope(&mut self, s: &mut Stmt) {
match s {
self.with_child(ScopeKind::Block, |child| match s {
Stmt::Block(s) => {
s.visit_mut_children_with(self);
child.mark_block(&mut s.span);
s.visit_mut_children_with(child);
}
_ => s.visit_mut_with(self),
}
_ => s.visit_mut_with(child),
});
}

/// Returns a [Mark] for an identifier reference.
Expand Down Expand Up @@ -374,6 +369,18 @@ impl<'a> Resolver<'a> {
};
}

fn mark_block(&mut self, span: &mut Span) {
if span.ctxt() != SyntaxContext::empty() {
return;
}

let mark = self.current.mark;

if mark != Mark::root() {
*span = span.apply_mark(mark)
}
}

fn try_resolving_as_type(&mut self, i: &mut Ident) {
if i.span.ctxt.outer() == self.config.unresolved_mark {
i.span.ctxt = SyntaxContext::empty()
Expand Down Expand Up @@ -542,20 +549,21 @@ impl<'a> VisitMut for Resolver<'a> {
e.params.visit_mut_with(child);
child.ident_type = old;

{
match &mut *e.body {
BlockStmtOrExpr::BlockStmt(s) => {
let old_strict_mode = child.strict_mode;
child.strict_mode = s
.stmts
.first()
.map(|stmt| stmt.is_use_strict())
.unwrap_or(false);
s.stmts.visit_mut_with(child);
child.strict_mode = old_strict_mode;
}
BlockStmtOrExpr::Expr(e) => e.visit_mut_with(child),
match &mut *e.body {
BlockStmtOrExpr::BlockStmt(s) => {
child.mark_block(&mut s.span);

let old_strict_mode = child.strict_mode;
child.strict_mode = s
.stmts
.first()
.map(|stmt| stmt.is_use_strict())
.unwrap_or(false);
// Prevent creating new scope.
s.stmts.visit_mut_with(child);
child.strict_mode = old_strict_mode;
}
BlockStmtOrExpr::Expr(e) => e.visit_mut_with(child),
}

e.return_type.visit_mut_with(child);
Expand Down Expand Up @@ -586,18 +594,11 @@ impl<'a> VisitMut for Resolver<'a> {

fn visit_mut_block_stmt(&mut self, block: &mut BlockStmt) {
self.with_child(ScopeKind::Block, |child| {
child.mark_block(&mut block.span);
block.visit_mut_children_with(child);
})
}

/// Handle body of the arrow functions
fn visit_mut_block_stmt_or_expr(&mut self, node: &mut BlockStmtOrExpr) {
match node {
BlockStmtOrExpr::BlockStmt(block) => block.visit_mut_children_with(self),
BlockStmtOrExpr::Expr(e) => e.visit_mut_with(self),
}
}

fn visit_mut_break_stmt(&mut self, s: &mut BreakStmt) {
let old = self.ident_type;
self.ident_type = IdentType::Label;
Expand All @@ -613,6 +614,7 @@ impl<'a> VisitMut for Resolver<'a> {
c.param.visit_mut_with(child);
child.ident_type = IdentType::Ref;

child.mark_block(&mut c.body.span);
c.body.visit_mut_children_with(child);
});
}
Expand Down Expand Up @@ -716,6 +718,7 @@ impl<'a> VisitMut for Resolver<'a> {

match &mut c.body {
Some(body) => {
child.mark_block(&mut body.span);
body.visit_mut_children_with(child);
}
None => {}
Expand All @@ -730,10 +733,6 @@ impl<'a> VisitMut for Resolver<'a> {
self.ident_type = old;
}

fn visit_mut_decl(&mut self, decl: &mut Decl) {
decl.visit_mut_children_with(self)
}

fn visit_mut_export_default_decl(&mut self, e: &mut ExportDefaultDecl) {
// Treat default exported functions and classes as declarations
// even though they are parsed as expressions.
Expand Down Expand Up @@ -799,7 +798,7 @@ impl<'a> VisitMut for Resolver<'a> {
}

fn visit_mut_fn_decl(&mut self, node: &mut FnDecl) {
// We don't fold this as Hoister handles this.
// We don't fold ident as Hoister handles this.

node.function.decorators.visit_mut_with(self);

Expand Down Expand Up @@ -855,6 +854,7 @@ impl<'a> VisitMut for Resolver<'a> {
}

fn visit_mut_function(&mut self, f: &mut Function) {
self.mark_block(&mut f.span);
f.type_params.visit_mut_with(self);

self.ident_type = IdentType::Ref;
Expand All @@ -880,6 +880,7 @@ impl<'a> VisitMut for Resolver<'a> {
self.ident_type = IdentType::Ref;
match &mut f.body {
Some(body) => {
self.mark_block(&mut body.span);
let old_strict_mode = self.strict_mode;
self.strict_mode = body
.stmts
Expand Down
@@ -1,6 +1,6 @@
let arr__1 = [];
for(let i__2 = 0; i__2 < 10; i__2++){
for(let i__3 = 0; i__3 < 10; i__3++){
arr__1.push(()=>i__3);
for(let i__4 = 0; i__4 < 10; i__4++){
arr__1.push(()=>i__4);
}
}
@@ -1,8 +1,8 @@
{
var foo__1 = 1;
{
let foo__2 = 2;
use(foo__2);
let foo__3 = 2;
use(foo__3);
}
use(foo__1);
}
@@ -1,9 +1,9 @@
const g__1 = 20;
function baz__1() {
{
class g__2 {
class g__3 {
}
console.log(g__2);
console.log(g__3);
}
return g__1;
}
@@ -1,6 +1,6 @@
export default function foo__1() {
foo__1 = function foo__2(x__3) {
return x__3 === 0 ? 1 : 1 + foo__2(x__3 - 1);
foo__1 = function foo__3(x__4) {
return x__4 === 0 ? 1 : 1 + foo__3(x__4 - 1);
};
return foo__1(10);
}
Expand Down
@@ -1,6 +1,6 @@
test(function foo__2() {
foo__2 = function foo__3(x__4) {
return x__4 === 0 ? 1 : 1 + foo__3(x__4 - 1);
foo__2 = function foo__4(x__5) {
return x__5 === 0 ? 1 : 1 + foo__4(x__5 - 1);
};
return foo__2(10);
});
Expand Up @@ -8,30 +8,30 @@ function foo__1() {
console.log(r__2());
}
function bar__1() {
var r__5 = ()=>1;
var r__6 = ()=>1;
if (true) {
function r__5() {
function r__6() {
return 2;
}
}
console.log(r__5());
console.log(r__6());
}
function baz__1() {
function r__6() {
function r__9() {
return 1;
}
if (true) {
function r__6() {
function r__9() {
return 2;
}
}
console.log(r__6());
console.log(r__9());
}
function quz__1(r__7 = ()=>1) {
function quz__1(r__13 = ()=>1) {
if (true) {
function r__8() {
function r__14() {
return 2;
}
}
console.log(r__7());
console.log(r__13());
}
@@ -1,12 +1,12 @@
const foo__1 = "foo";
function foobar__1() {
for (let item__2 of [
for (let item__3 of [
1,
2,
3
]){
let foo__3 = "bar";
[bar, foo__3] = [
let foo__4 = "bar";
[bar, foo__4] = [
1,
2
];
Expand Down
Expand Up @@ -5,7 +5,7 @@ export default function(module__1, exports__1) {
}(void 0, function(t__3) {
"use strict";
function vr__3(e__4, r__4, o__4) {
try {} catch (t__5) {}
try {} catch (t__6) {}
function t__4() {
return '123';
}
Expand Down
@@ -1,6 +1,6 @@
var e__1 = 1;
try {
throw 2;
} catch (e__2) {
console.log(e__2);
} catch (e__3) {
console.log(e__3);
}
@@ -1,6 +1,6 @@
function foo__1(e__2) {
e__0: {
try {} catch (e1__3) {
try {} catch (e1__5) {
o = null;
break e__0;
}
Expand Down
@@ -1,8 +1,8 @@
export function App__1() {
return <Form__1/>;
}
export function Form__1({ onChange__2 =function() {} }) {
export function Form__1({ onChange__3 =function() {} }) {
return <input onChange__0={function() {
onChange__2();
onChange__3();
}}/>;
}
@@ -1,10 +1,10 @@
var __assign__1 = function() {
__assign__1 = Object.assign || function __assign1__3(t__4) {
for(var s__4, i__4 = 1, n__4 = arguments.length; i__4 < n__4; i__4++){
s__4 = arguments[i__4];
for(var p__4 in s__4)if (Object.prototype.hasOwnProperty.call(s__4, p__4)) t__4[p__4] = s__4[p__4];
__assign__1 = Object.assign || function __assign1__4(t__5) {
for(var s__5, i__5 = 1, n__5 = arguments.length; i__5 < n__5; i__5++){
s__5 = arguments[i__5];
for(var p__5 in s__5)if (Object.prototype.hasOwnProperty.call(s__5, p__5)) t__5[p__5] = s__5[p__5];
}
return t__4;
return t__5;
};
return __assign__1.apply(this, arguments);
};
@@ -1,7 +1,7 @@
function a__1() {}
function b__1() {}
function foo__1({ a: b__2 }) {
expect(b__2).toBe("a");
function foo__1({ a: b__4 }) {
expect(b__4).toBe("a");
}
foo__1({
a: "a"
Expand Down
Expand Up @@ -3,6 +3,6 @@ function foo__1() {
try {
var a__2 = 1;
a__2;
} catch (err__3) {}
} catch (err__4) {}
a__2;
}

1 comment on commit 0f09e35

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark

Benchmark suite Current: 0f09e35 Previous: 493a4f7 Ratio
es/full/bugs-1 303703 ns/iter (± 15554) 327551 ns/iter (± 14225) 0.93
es/full/minify/libraries/antd 1637590908 ns/iter (± 36652688) 1715522347 ns/iter (± 60606046) 0.95
es/full/minify/libraries/d3 311664466 ns/iter (± 9929006) 338790927 ns/iter (± 15295068) 0.92
es/full/minify/libraries/echarts 1265692249 ns/iter (± 23027019) 1285622014 ns/iter (± 31497793) 0.98
es/full/minify/libraries/jquery 91006485 ns/iter (± 2236098) 95951022 ns/iter (± 2631591) 0.95
es/full/minify/libraries/lodash 106286110 ns/iter (± 1827383) 110474521 ns/iter (± 3319031) 0.96
es/full/minify/libraries/moment 53858626 ns/iter (± 1094772) 55146388 ns/iter (± 1055488) 0.98
es/full/minify/libraries/react 19755875 ns/iter (± 569343) 20436088 ns/iter (± 528286) 0.97
es/full/minify/libraries/terser 252695928 ns/iter (± 9198050) 265853458 ns/iter (± 8240809) 0.95
es/full/minify/libraries/three 446486514 ns/iter (± 9100111) 476921168 ns/iter (± 13199875) 0.94
es/full/minify/libraries/typescript 3136852563 ns/iter (± 21360722) 3169640697 ns/iter (± 47432772) 0.99
es/full/minify/libraries/victory 698723108 ns/iter (± 14174032) 734681824 ns/iter (± 17188689) 0.95
es/full/minify/libraries/vue 132348369 ns/iter (± 2616036) 139953054 ns/iter (± 3577865) 0.95
es/full/codegen/es3 26158 ns/iter (± 57) 27310 ns/iter (± 58) 0.96
es/full/codegen/es5 26270 ns/iter (± 70) 27306 ns/iter (± 82) 0.96
es/full/codegen/es2015 26243 ns/iter (± 63) 27357 ns/iter (± 65) 0.96
es/full/codegen/es2016 26240 ns/iter (± 69) 27483 ns/iter (± 89) 0.95
es/full/codegen/es2017 26293 ns/iter (± 50) 27397 ns/iter (± 72) 0.96
es/full/codegen/es2018 26254 ns/iter (± 33) 27360 ns/iter (± 77) 0.96
es/full/codegen/es2019 26227 ns/iter (± 213) 27373 ns/iter (± 60) 0.96
es/full/codegen/es2020 26268 ns/iter (± 32) 27350 ns/iter (± 130) 0.96
es/full/all/es3 184645027 ns/iter (± 4616826) 183157935 ns/iter (± 6671260) 1.01
es/full/all/es5 176459179 ns/iter (± 2869532) 178650225 ns/iter (± 4342617) 0.99
es/full/all/es2015 135481266 ns/iter (± 1934011) 140015284 ns/iter (± 2594129) 0.97
es/full/all/es2016 136174930 ns/iter (± 3907335) 135747368 ns/iter (± 3117324) 1.00
es/full/all/es2017 134304933 ns/iter (± 3093887) 135786508 ns/iter (± 1997966) 0.99
es/full/all/es2018 130857261 ns/iter (± 2218300) 133283504 ns/iter (± 3701879) 0.98
es/full/all/es2019 130235098 ns/iter (± 3520584) 134197746 ns/iter (± 5251094) 0.97
es/full/all/es2020 120053300 ns/iter (± 1721192) 124829582 ns/iter (± 3459330) 0.96
es/full/parser 538373 ns/iter (± 9525) 538228 ns/iter (± 8177) 1.00
es/full/base/fixer 22780 ns/iter (± 28) 22358 ns/iter (± 39) 1.02
es/full/base/resolver_and_hygiene 81980 ns/iter (± 102) 81437 ns/iter (± 247) 1.01
serialization of ast node 124 ns/iter (± 0) 124 ns/iter (± 0) 1
serialization of serde 126 ns/iter (± 0) 126 ns/iter (± 0) 1
css/minify/libraries/bootstrap 28471272 ns/iter (± 71421) 28687569 ns/iter (± 192112) 0.99
css/visitor/compare/clone 2089558 ns/iter (± 18343) 2063948 ns/iter (± 9258) 1.01
css/visitor/compare/visit_mut_span 2251811 ns/iter (± 5332) 2290205 ns/iter (± 20865) 0.98
css/visitor/compare/visit_mut_span_panic 2310458 ns/iter (± 10064) 2330354 ns/iter (± 8848) 0.99
css/visitor/compare/fold_span 3054502 ns/iter (± 17922) 3060277 ns/iter (± 20205) 1.00
css/visitor/compare/fold_span_panic 3182596 ns/iter (± 20395) 3231836 ns/iter (± 15882) 0.98
css/lexer/bootstrap_5_1_3 5134987 ns/iter (± 5000) 5155080 ns/iter (± 21322) 1.00
css/lexer/foundation_6_7_4 4316757 ns/iter (± 2393) 4357464 ns/iter (± 1373) 0.99
css/lexer/tailwind_3_1_1 821903 ns/iter (± 81) 819593 ns/iter (± 563) 1.00
css/parser/bootstrap_5_1_3 21919160 ns/iter (± 294009) 21995884 ns/iter (± 165712) 1.00
css/parser/foundation_6_7_4 17397936 ns/iter (± 22258) 17504740 ns/iter (± 41244) 0.99
css/parser/tailwind_3_1_1 3331638 ns/iter (± 5630) 3352583 ns/iter (± 5977) 0.99
es/codegen/colors 328519 ns/iter (± 184073) 329153 ns/iter (± 183797) 1.00
es/codegen/large 1172663 ns/iter (± 602045) 1169900 ns/iter (± 602304) 1.00
es/codegen/with-parser/colors 47845 ns/iter (± 380) 47993 ns/iter (± 246) 1.00
es/codegen/with-parser/large 521661 ns/iter (± 1973) 523824 ns/iter (± 854) 1.00
es/minify/libraries/antd 1449909700 ns/iter (± 27653808) 1479288291 ns/iter (± 33187408) 0.98
es/minify/libraries/d3 257710443 ns/iter (± 6299280) 263300696 ns/iter (± 5413737) 0.98
es/minify/libraries/echarts 1104977977 ns/iter (± 18873960) 1107958419 ns/iter (± 37468395) 1.00
es/minify/libraries/jquery 79641222 ns/iter (± 1910729) 81009340 ns/iter (± 1491631) 0.98
es/minify/libraries/lodash 95729739 ns/iter (± 1867334) 97569338 ns/iter (± 2454308) 0.98
es/minify/libraries/moment 46317706 ns/iter (± 945946) 47433620 ns/iter (± 1626353) 0.98
es/minify/libraries/react 16968820 ns/iter (± 248810) 17754446 ns/iter (± 364509) 0.96
es/minify/libraries/terser 221185983 ns/iter (± 6038189) 226603459 ns/iter (± 6307584) 0.98
es/minify/libraries/three 376934935 ns/iter (± 12437520) 395047101 ns/iter (± 12272024) 0.95
es/minify/libraries/typescript 2657118961 ns/iter (± 46145631) 2728733060 ns/iter (± 48069361) 0.97
es/minify/libraries/victory 600444791 ns/iter (± 15062614) 583830922 ns/iter (± 15555579) 1.03
es/minify/libraries/vue 116565237 ns/iter (± 2113278) 118414390 ns/iter (± 2084700) 0.98
es/visitor/compare/clone 2305160 ns/iter (± 14051) 2303764 ns/iter (± 38906) 1.00
es/visitor/compare/visit_mut_span 2679375 ns/iter (± 2912) 2672134 ns/iter (± 6054) 1.00
es/visitor/compare/visit_mut_span_panic 2713291 ns/iter (± 5939) 2718734 ns/iter (± 4978) 1.00
es/visitor/compare/fold_span 3764466 ns/iter (± 6651) 3822527 ns/iter (± 28531) 0.98
es/visitor/compare/fold_span_panic 3920290 ns/iter (± 6615) 3955814 ns/iter (± 6585) 0.99
es/lexer/colors 15374 ns/iter (± 174) 15475 ns/iter (± 18) 0.99
es/lexer/angular 7444554 ns/iter (± 3468) 7484803 ns/iter (± 7816) 0.99
es/lexer/backbone 991441 ns/iter (± 694) 996429 ns/iter (± 376) 0.99
es/lexer/jquery 5596061 ns/iter (± 1279) 5607666 ns/iter (± 2748) 1.00
es/lexer/jquery mobile 8608007 ns/iter (± 12768) 8598772 ns/iter (± 2197) 1.00
es/lexer/mootools 4437743 ns/iter (± 2138) 4459015 ns/iter (± 1947) 1.00
es/lexer/underscore 834780 ns/iter (± 266) 839182 ns/iter (± 454) 0.99
es/lexer/three 26215251 ns/iter (± 19958) 26333991 ns/iter (± 23589) 1.00
es/lexer/yui 4678733 ns/iter (± 1677) 4691144 ns/iter (± 3563) 1.00
es/parser/colors 29623 ns/iter (± 844) 29887 ns/iter (± 78) 0.99
es/parser/angular 15489162 ns/iter (± 149820) 15516314 ns/iter (± 86938) 1.00
es/parser/backbone 2244026 ns/iter (± 15055) 2240345 ns/iter (± 12689) 1.00
es/parser/jquery 12174567 ns/iter (± 112164) 12158670 ns/iter (± 97094) 1.00
es/parser/jquery mobile 19071163 ns/iter (± 180404) 19113998 ns/iter (± 239881) 1.00
es/parser/mootools 9270988 ns/iter (± 27577) 9260903 ns/iter (± 36057) 1.00
es/parser/underscore 1895524 ns/iter (± 10742) 1894115 ns/iter (± 10081) 1.00
es/parser/three 56437582 ns/iter (± 498995) 57569748 ns/iter (± 629386) 0.98
es/parser/yui 9304932 ns/iter (± 51677) 9312082 ns/iter (± 101052) 1.00
es/preset-env/usage/builtin_type 138413 ns/iter (± 32030) 137990 ns/iter (± 31896) 1.00
es/preset-env/usage/property 21300 ns/iter (± 111) 21667 ns/iter (± 47) 0.98
es/resolver/typescript 120808685 ns/iter (± 2126257) 113520621 ns/iter (± 1769092) 1.06
es/fixer/typescript 84512944 ns/iter (± 909121) 85545436 ns/iter (± 709392) 0.99
es/hygiene/typescript 183925855 ns/iter (± 2746738) 186941724 ns/iter (± 3424231) 0.98
es/resolver_with_hygiene/typescript 324223906 ns/iter (± 7015979) 323730450 ns/iter (± 2279302) 1.00
es/visitor/base-perf/module_clone 79934 ns/iter (± 1539) 80230 ns/iter (± 1119) 1.00
es/visitor/base-perf/fold_empty 90219 ns/iter (± 1208) 89168 ns/iter (± 1474) 1.01
es/visitor/base-perf/fold_noop_impl_all 89404 ns/iter (± 1595) 89799 ns/iter (± 1303) 1.00
es/visitor/base-perf/fold_noop_impl_vec 90337 ns/iter (± 1196) 89626 ns/iter (± 1531) 1.01
es/visitor/base-perf/boxing_boxed_clone 56 ns/iter (± 0) 57 ns/iter (± 0) 0.98
es/visitor/base-perf/boxing_unboxed_clone 54 ns/iter (± 0) 54 ns/iter (± 0) 1
es/visitor/base-perf/boxing_boxed 109 ns/iter (± 0) 102 ns/iter (± 0) 1.07
es/visitor/base-perf/boxing_unboxed 97 ns/iter (± 0) 96 ns/iter (± 0) 1.01
es/visitor/base-perf/visit_contains_this 3359 ns/iter (± 71) 3495 ns/iter (± 50) 0.96
es/base/parallel/resolver/typescript 6764561013 ns/iter (± 372062300) 5504636362 ns/iter (± 314006917) 1.23
es/base/parallel/hygiene/typescript 2202190547 ns/iter (± 51182046) 2199805571 ns/iter (± 30336364) 1.00
misc/visitors/time-complexity/time 5 91 ns/iter (± 3) 91 ns/iter (± 0) 1
misc/visitors/time-complexity/time 10 304 ns/iter (± 13) 290 ns/iter (± 0) 1.05
misc/visitors/time-complexity/time 15 620 ns/iter (± 10) 611 ns/iter (± 24) 1.01
misc/visitors/time-complexity/time 20 1147 ns/iter (± 7) 1131 ns/iter (± 3) 1.01
misc/visitors/time-complexity/time 40 5960 ns/iter (± 58) 6030 ns/iter (± 58) 0.99
misc/visitors/time-complexity/time 60 15346 ns/iter (± 76) 15226 ns/iter (± 123) 1.01
es/full-target/es2016 250204 ns/iter (± 668) 249407 ns/iter (± 340) 1.00
es/full-target/es2017 242721 ns/iter (± 451) 242426 ns/iter (± 433) 1.00
es/full-target/es2018 232183 ns/iter (± 333) 232147 ns/iter (± 452) 1.00
es2020_nullish_coalescing 91691 ns/iter (± 607) 91178 ns/iter (± 746) 1.01
es2020_optional_chaining 125502 ns/iter (± 526) 123139 ns/iter (± 297) 1.02
es2022_class_properties 147790 ns/iter (± 361) 147638 ns/iter (± 345) 1.00
es2018_object_rest_spread 95260 ns/iter (± 163) 95053 ns/iter (± 281) 1.00
es2019_optional_catch_binding 84693 ns/iter (± 179) 84100 ns/iter (± 203) 1.01
es2017_async_to_generator 85426 ns/iter (± 198) 84850 ns/iter (± 314) 1.01
es2016_exponentiation 89699 ns/iter (± 184) 89424 ns/iter (± 205) 1.00
es2015_arrow 93409 ns/iter (± 208) 93128 ns/iter (± 278) 1.00
es2015_block_scoped_fn 91105 ns/iter (± 260) 90761 ns/iter (± 112) 1.00
es2015_block_scoping 170335 ns/iter (± 259) 170034 ns/iter (± 485) 1.00

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

Please sign in to comment.