Skip to content

Commit ef8d121

Browse files
authoredAug 9, 2023
fix(es/minifier): Abort seq inliner if a same var is defined in outer scope (#7772)
**Description:** The algorithm here is directly copied from terser, I don't if it's correct or can be improved, but it does fix the issue. **Related issue:** - Closes #7749
1 parent c04ca52 commit ef8d121

File tree

19 files changed

+180
-120
lines changed

19 files changed

+180
-120
lines changed
 

‎crates/swc_ecma_ast/src/expr.rs

+6
Original file line numberDiff line numberDiff line change
@@ -613,6 +613,12 @@ impl Take for AssignExpr {
613613
}
614614
}
615615

616+
impl AssignExpr {
617+
pub fn is_simple_assign(&self) -> bool {
618+
self.op == op!("=") && self.left.as_ident().is_some()
619+
}
620+
}
621+
616622
// Custom deserializer to convert `PatOrExpr::Pat(Box<Pat::Ident>)`
617623
// to `PatOrExpr::Expr(Box<Expr::Ident>)` when `op` is not `=`.
618624
// Same logic as parser:

‎crates/swc_ecma_minifier/src/compress/optimize/iife.rs

+14-2
Original file line numberDiff line numberDiff line change
@@ -869,9 +869,21 @@ impl Optimizer<'_> {
869869
let ids: Vec<Id> = find_pat_ids(&decl.name);
870870

871871
for id in ids {
872-
remap
873-
.entry(id)
872+
let ctx = remap
873+
.entry(id.clone())
874874
.or_insert_with(|| SyntaxContext::empty().apply_mark(Mark::new()));
875+
876+
// [is_skippable_for_seq] would check fn scope
877+
if let Some(usage) = self.data.vars.get(&id) {
878+
let mut usage = usage.clone();
879+
usage.in_fn_scope_of = self.ctx.fn_scope;
880+
// as we turn var declaration into assignment
881+
// we need to maintain correct var usage
882+
if decl.init.is_some() {
883+
usage.ref_count += 1;
884+
}
885+
self.data.vars.insert((id.0, *ctx), usage);
886+
}
875887
}
876888
}
877889
}

‎crates/swc_ecma_minifier/src/compress/optimize/mod.rs

+4
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,9 @@ struct Ctx {
174174

175175
/// Current scope.
176176
scope: SyntaxContext,
177+
178+
/// Current function scope
179+
fn_scope: SyntaxContext,
177180
}
178181

179182
impl Ctx {
@@ -2134,6 +2137,7 @@ impl VisitMut for Optimizer<'_> {
21342137
skip_standalone: self.ctx.skip_standalone || is_standalone,
21352138
in_fn_like: true,
21362139
scope: n.span.ctxt,
2140+
fn_scope: n.span.ctxt,
21372141
top_level: false,
21382142

21392143
..self.ctx

‎crates/swc_ecma_minifier/src/compress/optimize/sequences.rs

+42-23
Original file line numberDiff line numberDiff line change
@@ -1158,25 +1158,14 @@ impl Optimizer<'_> {
11581158
)
11591159
}),
11601160
Mergable::Expr(a) => match a {
1161-
Expr::Assign(AssignExpr {
1162-
left,
1163-
right,
1164-
op: op!("="),
1165-
..
1166-
}) => {
1167-
if left.as_ident().is_some() {
1168-
Some(collect_infects_from(
1169-
right,
1170-
AliasConfig {
1171-
marks: Some(self.marks),
1172-
ignore_nested: true,
1173-
need_all: true,
1174-
},
1175-
))
1176-
} else {
1177-
None
1178-
}
1179-
}
1161+
Expr::Assign(a) if a.is_simple_assign() => Some(collect_infects_from(
1162+
&a.right,
1163+
AliasConfig {
1164+
marks: Some(self.marks),
1165+
ignore_nested: true,
1166+
need_all: true,
1167+
},
1168+
)),
11801169

11811170
_ => None,
11821171
},
@@ -1270,18 +1259,43 @@ impl Optimizer<'_> {
12701259
};
12711260

12721261
if let Some(a) = a {
1262+
let left_fn_scope = self
1263+
.data
1264+
.vars
1265+
.get(&left_id.to_id())
1266+
.map(|u| u.in_fn_scope_of)
1267+
.unwrap_or(self.expr_ctx.unresolved_ctxt);
12731268
match a {
12741269
Mergable::Var(a) => {
12751270
if is_ident_used_by(left_id.to_id(), &**a) {
12761271
log_abort!("e.left is used by a (var)");
12771272
return false;
12781273
}
1274+
1275+
if let Some(init) = &a.init {
1276+
if init.may_have_side_effects(&self.expr_ctx)
1277+
&& self.ctx.fn_scope != left_fn_scope
1278+
{
1279+
log_abort!("a (var) init has side effect");
1280+
return false;
1281+
}
1282+
}
12791283
}
12801284
Mergable::Expr(a) => {
12811285
if is_ident_used_by(left_id.to_id(), &**a) {
12821286
log_abort!("e.left is used by a (expr)");
12831287
return false;
12841288
}
1289+
let has_side_effect = match a {
1290+
Expr::Assign(a) if a.is_simple_assign() => {
1291+
a.right.may_have_side_effects(&self.expr_ctx)
1292+
}
1293+
_ => a.may_have_side_effects(&self.expr_ctx),
1294+
};
1295+
if has_side_effect && self.ctx.fn_scope != left_fn_scope {
1296+
log_abort!("a (expr) has side effect");
1297+
return false;
1298+
}
12851299
}
12861300
Mergable::FnDecl(a) => {
12871301
// TODO(kdy1): I'm not sure if this check is required.
@@ -1725,9 +1739,10 @@ impl Optimizer<'_> {
17251739
}
17261740

17271741
let b_left = b_assign.left.as_ident();
1728-
let b_left = match b_left {
1729-
Some(v) => v.clone(),
1730-
None => return Ok(false),
1742+
let b_left = if let Some(v) = b_left {
1743+
v.clone()
1744+
} else {
1745+
return Ok(false);
17311746
};
17321747

17331748
if !self.is_skippable_for_seq(Some(a), &Expr::Ident(b_left.clone())) {
@@ -2213,7 +2228,11 @@ impl Optimizer<'_> {
22132228
}
22142229

22152230
// We can remove this variable same as unused pass
2216-
if !usage.reassigned() && usage.usage_count == 1 && usage.declared {
2231+
if !usage.reassigned()
2232+
&& usage.usage_count == 1
2233+
&& usage.declared
2234+
&& !usage.used_recursively
2235+
{
22172236
can_remove = true;
22182237
}
22192238
} else {

‎crates/swc_ecma_minifier/src/program_data.rs

+4
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,8 @@ pub(crate) struct VarUsageInfo {
137137
pub(crate) accessed_props: Box<AHashMap<JsWord, u32>>,
138138

139139
pub(crate) used_recursively: bool,
140+
141+
pub(crate) in_fn_scope_of: SyntaxContext,
140142
}
141143

142144
impl Default for VarUsageInfo {
@@ -177,6 +179,7 @@ impl Default for VarUsageInfo {
177179
is_top_level: Default::default(),
178180
assigned_fn_local: true,
179181
used_as_ref: false,
182+
in_fn_scope_of: Default::default(),
180183
}
181184
}
182185
}
@@ -364,6 +367,7 @@ impl Storage for ProgramData {
364367
// }
365368

366369
let v = self.vars.entry(i.to_id()).or_default();
370+
v.in_fn_scope_of = ctx.fn_scope;
367371
v.is_top_level |= ctx.is_top_level;
368372

369373
if has_init && (v.declared || v.var_initialized) {

‎crates/swc_ecma_minifier/tests/benches-full/echarts.js

+31-31
Original file line numberDiff line numberDiff line change
@@ -26730,21 +26730,21 @@
2673026730
}
2673126731
function updateRectShape(controller, cover, name, x, y, w, h) {
2673226732
var points, xmin, ymin, el = cover.childOfName(name);
26733-
el && el.setShape((xmin = mathMin$9((points = clipByPanel(controller, cover, [
26734-
[
26735-
x,
26736-
y
26737-
],
26738-
[
26739-
x + w,
26740-
y + h
26741-
]
26742-
]))[0][0], points[1][0]), {
26743-
x: xmin,
26733+
el && el.setShape({
26734+
x: xmin = mathMin$9((points = clipByPanel(controller, cover, [
26735+
[
26736+
x,
26737+
y
26738+
],
26739+
[
26740+
x + w,
26741+
y + h
26742+
]
26743+
]))[0][0], points[1][0]),
2674426744
y: ymin = mathMin$9(points[0][1], points[1][1]),
2674526745
width: mathMax$9(points[0][0], points[1][0]) - xmin,
2674626746
height: mathMax$9(points[0][1], points[1][1]) - ymin
26747-
}));
26747+
});
2674826748
}
2674926749
function makeStyle(brushOption) {
2675026750
return defaults({
@@ -34700,25 +34700,25 @@
3470034700
header.innerHTML = lang[0] || model.get('title'), header.style.cssText = 'margin: 10px 20px;', header.style.color = model.get('textColor');
3470134701
var viewMain = document.createElement('div'), textarea = document.createElement('textarea');
3470234702
viewMain.style.cssText = 'display:block;width:100%;overflow:auto;';
34703-
var optionToContent = model.get('optionToContent'), contentToOption = model.get('contentToOption'), result1 = (seriesGroupByCategoryAxis = {}, otherSeries = [], meta = [], ecModel.eachRawSeries(function(seriesModel) {
34704-
var coordSys = seriesModel.coordinateSystem;
34705-
if (coordSys && ('cartesian2d' === coordSys.type || 'polar' === coordSys.type)) {
34706-
var baseAxis = coordSys.getBaseAxis();
34707-
if ('category' === baseAxis.type) {
34708-
var key = baseAxis.dim + '_' + baseAxis.index;
34709-
seriesGroupByCategoryAxis[key] || (seriesGroupByCategoryAxis[key] = {
34710-
categoryAxis: baseAxis,
34711-
valueAxis: coordSys.getOtherAxis(baseAxis),
34712-
series: []
34713-
}, meta.push({
34714-
axisDim: baseAxis.dim,
34715-
axisIndex: baseAxis.index
34716-
})), seriesGroupByCategoryAxis[key].series.push(seriesModel);
34717-
} else otherSeries.push(seriesModel);
34718-
} else otherSeries.push(seriesModel);
34719-
}), {
34703+
var optionToContent = model.get('optionToContent'), contentToOption = model.get('contentToOption'), result1 = {
3472034704
value: filter([
34721-
(groups = (result = {
34705+
(groups = (seriesGroupByCategoryAxis = {}, otherSeries = [], meta = [], ecModel.eachRawSeries(function(seriesModel) {
34706+
var coordSys = seriesModel.coordinateSystem;
34707+
if (coordSys && ('cartesian2d' === coordSys.type || 'polar' === coordSys.type)) {
34708+
var baseAxis = coordSys.getBaseAxis();
34709+
if ('category' === baseAxis.type) {
34710+
var key = baseAxis.dim + '_' + baseAxis.index;
34711+
seriesGroupByCategoryAxis[key] || (seriesGroupByCategoryAxis[key] = {
34712+
categoryAxis: baseAxis,
34713+
valueAxis: coordSys.getOtherAxis(baseAxis),
34714+
series: []
34715+
}, meta.push({
34716+
axisDim: baseAxis.dim,
34717+
axisIndex: baseAxis.index
34718+
})), seriesGroupByCategoryAxis[key].series.push(seriesModel);
34719+
} else otherSeries.push(seriesModel);
34720+
} else otherSeries.push(seriesModel);
34721+
}), result = {
3472234722
seriesGroupByCategoryAxis: seriesGroupByCategoryAxis,
3472334723
other: otherSeries,
3472434724
meta: meta
@@ -34757,7 +34757,7 @@
3475734757
return !!str.replace(/[\n\t\s]/g, '');
3475834758
}).join('\n\n' + BLOCK_SPLITER + '\n\n'),
3475934759
meta: result.meta
34760-
});
34760+
};
3476134761
if ('function' == typeof optionToContent) {
3476234762
var htmlOrDom = optionToContent(api.getOption());
3476334763
'string' == typeof htmlOrDom ? viewMain.innerHTML = htmlOrDom : isDom(htmlOrDom) && viewMain.appendChild(htmlOrDom);

‎crates/swc_ecma_minifier/tests/benches-full/victory.js

+9-9
Original file line numberDiff line numberDiff line change
@@ -13437,9 +13437,9 @@
1343713437
return childComponents.map(function(child, index) {
1343813438
var child1, props1, calculatedProps1, domain, scale, stringMap, categories, axisChild, role = child.type && child.type.role, style = Array.isArray(child.props.style) ? child.props.style : lodash_defaults__WEBPACK_IMPORTED_MODULE_1___default()({}, child.props.style, {
1343913439
parent: baseStyle
13440-
}), childProps = (child1 = child, props1 = props, calculatedProps1 = calculatedProps, axisChild = victory_core__WEBPACK_IMPORTED_MODULE_3__.Axis.findAxisComponents([
13440+
}), childProps = (child1 = child, props1 = props, calculatedProps1 = calculatedProps, (axisChild = victory_core__WEBPACK_IMPORTED_MODULE_3__.Axis.findAxisComponents([
1344113441
child1
13442-
]), axisChild.length > 0 ? (axisChild[0], domain = calculatedProps1.domain, scale = calculatedProps1.scale, stringMap = calculatedProps1.stringMap, categories = calculatedProps1.categories, {
13442+
])).length > 0 ? (axisChild[0], domain = calculatedProps1.domain, scale = calculatedProps1.scale, stringMap = calculatedProps1.stringMap, categories = calculatedProps1.categories, {
1344313443
stringMap: stringMap,
1344413444
horizontal: calculatedProps1.horizontal,
1344513445
categories: categories,
@@ -18467,8 +18467,8 @@
1846718467
x: x,
1846818468
y: y
1846918469
};
18470-
var polarPadding = (style = props.style, degrees = getDegrees(props, datum), labelStyle = style.labels || {}, padding = _helpers__WEBPACK_IMPORTED_MODULE_1__.default.evaluateProp(labelStyle.padding, props) || 0, {
18471-
x: padding * Math.cos(angle = _helpers__WEBPACK_IMPORTED_MODULE_1__.default.degreesToRadians(degrees)),
18470+
var polarPadding = (style = props.style, degrees = getDegrees(props, datum), labelStyle = style.labels || {}, {
18471+
x: (padding = _helpers__WEBPACK_IMPORTED_MODULE_1__.default.evaluateProp(labelStyle.padding, props) || 0) * Math.cos(angle = _helpers__WEBPACK_IMPORTED_MODULE_1__.default.degreesToRadians(degrees)),
1847218472
y: -padding * Math.sin(angle)
1847318473
});
1847418474
return {
@@ -28248,9 +28248,9 @@
2824828248
{
2824928249
key: "getCachedSharedEvents",
2825028250
value: function(name, cacheValues) {
28251-
var arr, _ref2 = function(arr) {
28251+
var _ref = this.sharedEventsCache[name] || [], _ref2 = function(arr) {
2825228252
if (Array.isArray(arr)) return arr;
28253-
}(arr = this.sharedEventsCache[name] || []) || function(arr, i) {
28253+
}(_ref) || function(arr, i) {
2825428254
var _arr = [], _n = !0, _d = !1, _e = void 0;
2825528255
try {
2825628256
for(var _s, _i = arr[Symbol.iterator](); !(_n = (_s = _i.next()).done) && (_arr.push(_s.value), !i || _arr.length !== i); _n = !0);
@@ -28264,7 +28264,7 @@
2826428264
}
2826528265
}
2826628266
return _arr;
28267-
}(arr, 2) || function() {
28267+
}(_ref, 2) || function() {
2826828268
throw TypeError("Invalid attempt to destructure non-iterable instance");
2826928269
}(), sharedEvents = _ref2[0], prevCacheValues = _ref2[1];
2827028270
if (sharedEvents && react_fast_compare__WEBPACK_IMPORTED_MODULE_10___default()(cacheValues, prevCacheValues)) return sharedEvents;
@@ -28468,13 +28468,13 @@
2846828468
return dataset.filter(function(datum) {
2846928469
return null !== datum._x && null !== datum._y;
2847028470
});
28471-
}), fillInMissingData = props1.fillInMissingData, xMap = filterNullChildData.reduce(function(prev, dataset) {
28471+
}), (fillInMissingData = props1.fillInMissingData, xMap = filterNullChildData.reduce(function(prev, dataset) {
2847228472
return dataset.forEach(function(datum) {
2847328473
prev[datum._x instanceof Date ? datum._x.getTime() : datum._x] = !0;
2847428474
}), prev;
2847528475
}, {}), xKeys = lodash_keys__WEBPACK_IMPORTED_MODULE_1___default()(xMap).map(function(k) {
2847628476
return +k;
28477-
}), xArr = lodash_orderBy__WEBPACK_IMPORTED_MODULE_0___default()(xKeys), (datasets = filterNullChildData.map(function(dataset) {
28477+
}), xArr = lodash_orderBy__WEBPACK_IMPORTED_MODULE_0___default()(xKeys), datasets = filterNullChildData.map(function(dataset) {
2847828478
var indexOffset = 0, isDate = dataset[0] && dataset[0]._x instanceof Date;
2847928479
return xArr.map(function(x, index) {
2848028480
x = +x;

1 commit comments

Comments
 (1)

github-actions[bot] commented on Aug 9, 2023

@github-actions[bot]

Benchmark

Benchmark suite Current: ef8d121 Previous: 76c6258 Ratio
es/full/bugs-1 299712 ns/iter (± 11532) 302433 ns/iter (± 9145) 0.99
es/full/minify/libraries/antd 1394631089 ns/iter (± 18613016) 1399873141 ns/iter (± 26662433) 1.00
es/full/minify/libraries/d3 302419949 ns/iter (± 5095944) 291312214 ns/iter (± 6362275) 1.04
es/full/minify/libraries/echarts 1137580764 ns/iter (± 24783375) 1121744008 ns/iter (± 16769582) 1.01
es/full/minify/libraries/jquery 87629996 ns/iter (± 982207) 87516659 ns/iter (± 1008232) 1.00
es/full/minify/libraries/lodash 102063730 ns/iter (± 1767861) 101006557 ns/iter (± 924613) 1.01
es/full/minify/libraries/moment 51367819 ns/iter (± 629236) 51160206 ns/iter (± 329732) 1.00
es/full/minify/libraries/react 18456412 ns/iter (± 165722) 18333372 ns/iter (± 157213) 1.01
es/full/minify/libraries/terser 234136784 ns/iter (± 4056186) 227732829 ns/iter (± 2162244) 1.03
es/full/minify/libraries/three 413849425 ns/iter (± 6739863) 404394957 ns/iter (± 5900297) 1.02
es/full/minify/libraries/typescript 2822062594 ns/iter (± 19076403) 2775790289 ns/iter (± 18303733) 1.02
es/full/minify/libraries/victory 617819051 ns/iter (± 18509842) 605374987 ns/iter (± 9628579) 1.02
es/full/minify/libraries/vue 126742550 ns/iter (± 2980845) 124300327 ns/iter (± 823100) 1.02
es/full/codegen/es3 33559 ns/iter (± 81) 36047 ns/iter (± 105) 0.93
es/full/codegen/es5 33453 ns/iter (± 75) 36025 ns/iter (± 87) 0.93
es/full/codegen/es2015 33416 ns/iter (± 48) 36046 ns/iter (± 61) 0.93
es/full/codegen/es2016 33414 ns/iter (± 107) 36097 ns/iter (± 64) 0.93
es/full/codegen/es2017 33483 ns/iter (± 91) 36010 ns/iter (± 53) 0.93
es/full/codegen/es2018 33459 ns/iter (± 75) 36055 ns/iter (± 97) 0.93
es/full/codegen/es2019 33461 ns/iter (± 58) 36076 ns/iter (± 119) 0.93
es/full/codegen/es2020 33459 ns/iter (± 92) 36057 ns/iter (± 47) 0.93
es/full/all/es3 172276978 ns/iter (± 1487369) 174093278 ns/iter (± 2233691) 0.99
es/full/all/es5 165624013 ns/iter (± 1086043) 164980742 ns/iter (± 945991) 1.00
es/full/all/es2015 123850732 ns/iter (± 703935) 125059279 ns/iter (± 657863) 0.99
es/full/all/es2016 123298297 ns/iter (± 723889) 124827361 ns/iter (± 1266109) 0.99
es/full/all/es2017 121849202 ns/iter (± 865918) 123924999 ns/iter (± 647447) 0.98
es/full/all/es2018 120433284 ns/iter (± 772849) 121269638 ns/iter (± 783413) 0.99
es/full/all/es2019 119539674 ns/iter (± 1004071) 121101010 ns/iter (± 745090) 0.99
es/full/all/es2020 114590260 ns/iter (± 642664) 116165562 ns/iter (± 663064) 0.99
es/full/parser 531729 ns/iter (± 4949) 538747 ns/iter (± 4466) 0.99
es/full/base/fixer 20523 ns/iter (± 302) 17702 ns/iter (± 180) 1.16
es/full/base/resolver_and_hygiene 82519 ns/iter (± 186) 82471 ns/iter (± 234) 1.00
serialization of serde 290 ns/iter (± 0) 297 ns/iter (± 1) 0.98
css/minify/libraries/bootstrap 30058238 ns/iter (± 361468) 29117016 ns/iter (± 308612) 1.03
css/visitor/compare/clone 1644864 ns/iter (± 6686) 1650069 ns/iter (± 9312) 1.00
css/visitor/compare/visit_mut_span 1781529 ns/iter (± 10874) 1776326 ns/iter (± 13315) 1.00
css/visitor/compare/visit_mut_span_panic 1852683 ns/iter (± 4170) 1860611 ns/iter (± 16797) 1.00
css/visitor/compare/fold_span 2615145 ns/iter (± 16861) 2588210 ns/iter (± 15179) 1.01
css/visitor/compare/fold_span_panic 2803104 ns/iter (± 34289) 2794161 ns/iter (± 20725) 1.00
css/lexer/bootstrap_5_1_3 4554118 ns/iter (± 5067) 4690502 ns/iter (± 2847) 0.97
css/lexer/foundation_6_7_4 3835552 ns/iter (± 3004) 3952392 ns/iter (± 3716) 0.97
css/lexer/tailwind_3_1_1 729151 ns/iter (± 324) 747301 ns/iter (± 3480) 0.98
css/parser/bootstrap_5_1_3 19473371 ns/iter (± 121937) 19152111 ns/iter (± 162428) 1.02
css/parser/foundation_6_7_4 15343105 ns/iter (± 941742) 15358295 ns/iter (± 85763) 1.00
css/parser/tailwind_3_1_1 2931218 ns/iter (± 39326) 2943144 ns/iter (± 3661) 1.00
es/codegen/colors 722797 ns/iter (± 397033) 738049 ns/iter (± 404528) 0.98
es/codegen/large 2918435 ns/iter (± 1541553) 2900987 ns/iter (± 1547003) 1.01
es/codegen/with-parser/colors 45478 ns/iter (± 620) 45372 ns/iter (± 520) 1.00
es/codegen/with-parser/large 489493 ns/iter (± 1355) 486708 ns/iter (± 2029) 1.01
es/minify/libraries/antd 1242606014 ns/iter (± 25169138) 1241382474 ns/iter (± 18047835) 1.00
es/minify/libraries/d3 255780279 ns/iter (± 6807460) 254413302 ns/iter (± 5978669) 1.01
es/minify/libraries/echarts 996370504 ns/iter (± 23538535) 986100649 ns/iter (± 16946437) 1.01
es/minify/libraries/jquery 75932903 ns/iter (± 555420) 76071910 ns/iter (± 549340) 1.00
es/minify/libraries/lodash 90428196 ns/iter (± 399630) 91121971 ns/iter (± 963681) 0.99
es/minify/libraries/moment 44681947 ns/iter (± 388386) 44653739 ns/iter (± 297601) 1.00
es/minify/libraries/react 16354682 ns/iter (± 156272) 16383704 ns/iter (± 136079) 1.00
es/minify/libraries/terser 195367956 ns/iter (± 1864302) 198162204 ns/iter (± 3780905) 0.99
es/minify/libraries/three 342422021 ns/iter (± 5546330) 347940277 ns/iter (± 7834524) 0.98
es/minify/libraries/typescript 2377877713 ns/iter (± 20813513) 2426803576 ns/iter (± 19302326) 0.98
es/minify/libraries/victory 514082512 ns/iter (± 6690608) 515399876 ns/iter (± 19246828) 1.00
es/minify/libraries/vue 109985116 ns/iter (± 1103594) 111230463 ns/iter (± 1349909) 0.99
es/visitor/compare/clone 1987662 ns/iter (± 9582) 1953709 ns/iter (± 5632) 1.02
es/visitor/compare/visit_mut_span 2335438 ns/iter (± 7790) 2316003 ns/iter (± 8172) 1.01
es/visitor/compare/visit_mut_span_panic 2367441 ns/iter (± 28112) 2342280 ns/iter (± 6730) 1.01
es/visitor/compare/fold_span 3411996 ns/iter (± 25372) 3378086 ns/iter (± 27117) 1.01
es/visitor/compare/fold_span_panic 3536757 ns/iter (± 44235) 3531839 ns/iter (± 85109) 1.00
es/lexer/colors 12865 ns/iter (± 17) 12876 ns/iter (± 49) 1.00
es/lexer/angular 6004294 ns/iter (± 6027) 5999244 ns/iter (± 10299) 1.00
es/lexer/backbone 770668 ns/iter (± 2712) 787497 ns/iter (± 1164) 0.98
es/lexer/jquery 4375412 ns/iter (± 4591) 4445509 ns/iter (± 5595) 0.98
es/lexer/jquery mobile 6707206 ns/iter (± 4530) 6726624 ns/iter (± 4858) 1.00
es/lexer/mootools 3464410 ns/iter (± 4578) 3502611 ns/iter (± 2250) 0.99
es/lexer/underscore 647259 ns/iter (± 648) 655692 ns/iter (± 297) 0.99
es/lexer/three 20826154 ns/iter (± 33028) 20982538 ns/iter (± 21406) 0.99
es/lexer/yui 3756131 ns/iter (± 1188) 3820452 ns/iter (± 1047) 0.98
es/parser/colors 27219 ns/iter (± 54) 27411 ns/iter (± 97) 0.99
es/parser/angular 13908487 ns/iter (± 162043) 13988857 ns/iter (± 190785) 0.99
es/parser/backbone 2023335 ns/iter (± 4014) 2020847 ns/iter (± 12071) 1.00
es/parser/jquery 11300653 ns/iter (± 269748) 11328541 ns/iter (± 168646) 1.00
es/parser/jquery mobile 17344700 ns/iter (± 359685) 17481954 ns/iter (± 308913) 0.99
es/parser/mootools 8545234 ns/iter (± 67523) 8545984 ns/iter (± 36529) 1.00
es/parser/underscore 1741986 ns/iter (± 11420) 1763528 ns/iter (± 9932) 0.99
es/parser/three 49239028 ns/iter (± 732146) 50346530 ns/iter (± 641954) 0.98
es/parser/yui 8453282 ns/iter (± 99648) 8476583 ns/iter (± 68927) 1.00
es/preset-env/usage/builtin_type 138407 ns/iter (± 33241) 134281 ns/iter (± 31092) 1.03
es/preset-env/usage/property 16677 ns/iter (± 73) 17406 ns/iter (± 50) 0.96
es/resolver/typescript 90534643 ns/iter (± 1558133) 92813227 ns/iter (± 1636992) 0.98
es/fixer/typescript 64557092 ns/iter (± 841588) 66887425 ns/iter (± 1248527) 0.97
es/hygiene/typescript 135372924 ns/iter (± 1688939) 135795133 ns/iter (± 1851047) 1.00
es/resolver_with_hygiene/typescript 252522879 ns/iter (± 4801228) 255711547 ns/iter (± 4948268) 0.99
es/visitor/base-perf/module_clone 58970 ns/iter (± 323) 58504 ns/iter (± 367) 1.01
es/visitor/base-perf/fold_empty 63315 ns/iter (± 797) 62826 ns/iter (± 497) 1.01
es/visitor/base-perf/fold_noop_impl_all 62726 ns/iter (± 491) 63758 ns/iter (± 248) 0.98
es/visitor/base-perf/fold_noop_impl_vec 63412 ns/iter (± 170) 63377 ns/iter (± 413) 1.00
es/visitor/base-perf/boxing_boxed_clone 57 ns/iter (± 0) 57 ns/iter (± 0) 1
es/visitor/base-perf/boxing_unboxed_clone 40 ns/iter (± 0) 39 ns/iter (± 0) 1.03
es/visitor/base-perf/boxing_boxed 106 ns/iter (± 0) 108 ns/iter (± 0) 0.98
es/visitor/base-perf/boxing_unboxed 75 ns/iter (± 0) 78 ns/iter (± 0) 0.96
es/visitor/base-perf/visit_empty 0 ns/iter (± 0) 0 ns/iter (± 0) NaN
es/visitor/base-perf/visit_contains_this 2432 ns/iter (± 12) 2528 ns/iter (± 14) 0.96
es/base/parallel/resolver/typescript 3645814264 ns/iter (± 231872778) 3941748667 ns/iter (± 317076874) 0.92
es/base/parallel/hygiene/typescript 1458012924 ns/iter (± 17085985) 1471490128 ns/iter (± 15547190) 0.99
misc/visitors/time-complexity/time 5 137 ns/iter (± 8) 132 ns/iter (± 7) 1.04
misc/visitors/time-complexity/time 10 372 ns/iter (± 8) 291 ns/iter (± 0) 1.28
misc/visitors/time-complexity/time 15 674 ns/iter (± 3) 690 ns/iter (± 1) 0.98
misc/visitors/time-complexity/time 20 1052 ns/iter (± 28) 1063 ns/iter (± 21) 0.99
misc/visitors/time-complexity/time 40 3705 ns/iter (± 64) 3563 ns/iter (± 8) 1.04
misc/visitors/time-complexity/time 60 7715 ns/iter (± 64) 7313 ns/iter (± 36) 1.05
es/full-target/es2016 231134 ns/iter (± 810) 229350 ns/iter (± 469) 1.01
es/full-target/es2017 218523 ns/iter (± 461) 217123 ns/iter (± 622) 1.01
es/full-target/es2018 206198 ns/iter (± 523) 206458 ns/iter (± 800) 1.00
es2020_nullish_coalescing 71468 ns/iter (± 330) 70588 ns/iter (± 509) 1.01
es2020_optional_chaining 83657 ns/iter (± 370) 83406 ns/iter (± 474) 1.00
es2022_class_properties 114673 ns/iter (± 185) 115355 ns/iter (± 328) 0.99
es2018_object_rest_spread 75465 ns/iter (± 426) 74989 ns/iter (± 537) 1.01
es2019_optional_catch_binding 65574 ns/iter (± 244) 65378 ns/iter (± 234) 1.00
es2017_async_to_generator 65455 ns/iter (± 241) 63908 ns/iter (± 211) 1.02
es2016_exponentiation 69724 ns/iter (± 314) 69324 ns/iter (± 276) 1.01
es2015_arrow 73264 ns/iter (± 275) 72891 ns/iter (± 343) 1.01
es2015_block_scoped_fn 69774 ns/iter (± 263) 69544 ns/iter (± 320) 1.00
es2015_block_scoping 123642 ns/iter (± 671) 123400 ns/iter (± 390) 1.00

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

Please sign in to comment.