Skip to content

Commit

Permalink
fix(es/minifier): Fix optimization of numeric keys (#6052)
Browse files Browse the repository at this point in the history
**Description:**

We should not optimize if the key starts with `0`.

**Related issue:**

 - Closes #6051.
  • Loading branch information
kdy1 committed Oct 5, 2022
1 parent cad80e3 commit e3b55e4
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 8 deletions.
18 changes: 10 additions & 8 deletions crates/swc_ecma_minifier/src/compress/pure/properties.rs
Original file line number Diff line number Diff line change
Expand Up @@ -95,14 +95,16 @@ impl Pure<'_> {
return;
}

if let Ok(v) = s.value.parse::<u32>() {
self.changed = true;
report_change!("misc: Optimizing numeric property name");
*name = PropName::Num(Number {
span: s.span,
value: v as _,
raw: None,
});
if !s.value.starts_with('0') || s.value.len() <= 1 {
if let Ok(v) = s.value.parse::<u32>() {
self.changed = true;
report_change!("misc: Optimizing numeric property name");
*name = PropName::Num(Number {
span: s.span,
value: v as _,
raw: None,
});
}
}
}
}
Expand Down
10 changes: 10 additions & 0 deletions crates/swc_ecma_minifier/tests/exec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10130,3 +10130,13 @@ fn feedback_regex_range() {

run_default_exec_test(src);
}

#[test]
fn issue_6051() {
run_default_exec_test(
r###"
const o = { '010': '', '123': 'bar' }
console.log(o)
"###,
);
}

1 comment on commit e3b55e4

@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: e3b55e4 Previous: c5fb774 Ratio
es/full/minify/libraries/antd 1848783993 ns/iter (± 15244273) 2094328030 ns/iter (± 129335348) 0.88
es/full/minify/libraries/d3 348914662 ns/iter (± 4711514) 376506083 ns/iter (± 26660409) 0.93
es/full/minify/libraries/echarts 1409619321 ns/iter (± 17841593) 1571798858 ns/iter (± 136902642) 0.90
es/full/minify/libraries/jquery 85105490 ns/iter (± 1707053) 102795240 ns/iter (± 17538307) 0.83
es/full/minify/libraries/lodash 103383122 ns/iter (± 4032407) 114068275 ns/iter (± 2827714) 0.91
es/full/minify/libraries/moment 49253451 ns/iter (± 4226823) 52251785 ns/iter (± 1250420) 0.94
es/full/minify/libraries/react 18317341 ns/iter (± 279402) 22656378 ns/iter (± 2283777) 0.81
es/full/minify/libraries/terser 265951843 ns/iter (± 4946910) 319431133 ns/iter (± 42625519) 0.83
es/full/minify/libraries/three 479946685 ns/iter (± 4619520) 596442752 ns/iter (± 132817412) 0.80
es/full/minify/libraries/typescript 3177674496 ns/iter (± 19655885) 3419017243 ns/iter (± 157753282) 0.93
es/full/minify/libraries/victory 737614815 ns/iter (± 12022003) 780752659 ns/iter (± 11018167) 0.94
es/full/minify/libraries/vue 125914925 ns/iter (± 3064974) 143968224 ns/iter (± 10070664) 0.87
es/full/codegen/es3 33979 ns/iter (± 552) 35061 ns/iter (± 2855) 0.97
es/full/codegen/es5 33979 ns/iter (± 854) 34533 ns/iter (± 2480) 0.98
es/full/codegen/es2015 33977 ns/iter (± 806) 34595 ns/iter (± 3024) 0.98
es/full/codegen/es2016 34013 ns/iter (± 1039) 35409 ns/iter (± 4733) 0.96
es/full/codegen/es2017 33942 ns/iter (± 1237) 34915 ns/iter (± 1999) 0.97
es/full/codegen/es2018 33967 ns/iter (± 702) 35486 ns/iter (± 2781) 0.96
es/full/codegen/es2019 33959 ns/iter (± 767) 35080 ns/iter (± 6583) 0.97
es/full/codegen/es2020 33923 ns/iter (± 919) 34763 ns/iter (± 8534) 0.98
es/full/all/es3 190157744 ns/iter (± 4396922) 226992374 ns/iter (± 24107119) 0.84
es/full/all/es5 180107404 ns/iter (± 3709173) 187755036 ns/iter (± 18028554) 0.96
es/full/all/es2015 144640874 ns/iter (± 3636598) 149688452 ns/iter (± 13151111) 0.97
es/full/all/es2016 145429986 ns/iter (± 4319671) 154771277 ns/iter (± 28261866) 0.94
es/full/all/es2017 143889974 ns/iter (± 7310448) 165910761 ns/iter (± 20555440) 0.87
es/full/all/es2018 145935584 ns/iter (± 62376541) 146397418 ns/iter (± 27927707) 1.00
es/full/all/es2019 142347336 ns/iter (± 6965351) 157410143 ns/iter (± 17267880) 0.90
es/full/all/es2020 156921972 ns/iter (± 13737213) 141048301 ns/iter (± 12532030) 1.11
es/full/parser 724747 ns/iter (± 27936) 746663 ns/iter (± 58993) 0.97
es/full/base/fixer 26376 ns/iter (± 721) 27181 ns/iter (± 1992) 0.97
es/full/base/resolver_and_hygiene 94636 ns/iter (± 2728) 97142 ns/iter (± 4050) 0.97
serialization of ast node 232 ns/iter (± 15) 219 ns/iter (± 11) 1.06
serialization of serde 231 ns/iter (± 4) 221 ns/iter (± 3) 1.05

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

Please sign in to comment.