Skip to content

Commit

Permalink
fix(es/compat): Fix destructuring of an empty array (#6314)
Browse files Browse the repository at this point in the history
  • Loading branch information
alexander-akait committed Nov 2, 2022
1 parent 06a664a commit 3bea6f7
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 2 deletions.
5 changes: 3 additions & 2 deletions crates/swc_ecma_transforms_compat/src/es2015/destructuring.rs
Expand Up @@ -160,8 +160,9 @@ impl AssignFolder {
if is_literal(&init) {
match *init {
Expr::Array(arr)
if elems.len() == arr.elems.len()
|| (elems.len() < arr.elems.len() && has_rest_pat(&elems)) =>
if !elems.is_empty()
&& (elems.len() == arr.elems.len()
|| (elems.len() < arr.elems.len() && has_rest_pat(&elems))) =>
{
let mut arr_elems = Some(arr.elems.into_iter());
elems.into_iter().for_each(|p| match p {
Expand Down
24 changes: 24 additions & 0 deletions crates/swc_ecma_transforms_compat/tests/es2015_destructuring.rs
Expand Up @@ -2261,3 +2261,27 @@ test!(
"let [x] = [,];",
"let x;"
);

test!(
syntax(),
|_| tr(),
issue_6304,
"let [] = [];",
"let ref = [];"
);

test!(
syntax(),
|_| tr(),
issue_6304_1,
"let [] = [,];",
"let ref = [,];"
);

test!(
syntax(),
|_| tr(),
issue_6304_2,
"let [] = [...[1, 2, 3]];",
"let ref = [...[1, 2, 3]];"
);

1 comment on commit 3bea6f7

@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: 3bea6f7 Previous: 3a90657 Ratio
es/full/bugs-1 399743 ns/iter (± 61356) 541306 ns/iter (± 101426) 0.74
es/full/minify/libraries/antd 1955675265 ns/iter (± 60450808) 2396249763 ns/iter (± 206039464) 0.82
es/full/minify/libraries/d3 458567593 ns/iter (± 32049872) 563987267 ns/iter (± 136773049) 0.81
es/full/minify/libraries/echarts 1636140742 ns/iter (± 58984035) 1977225630 ns/iter (± 179105467) 0.83
es/full/minify/libraries/jquery 103149575 ns/iter (± 6021113) 157246555 ns/iter (± 22418018) 0.66
es/full/minify/libraries/lodash 130941517 ns/iter (± 19520720) 224704757 ns/iter (± 44874771) 0.58
es/full/minify/libraries/moment 59649083 ns/iter (± 1706865) 106836842 ns/iter (± 32119877) 0.56
es/full/minify/libraries/react 20034497 ns/iter (± 716720) 30845734 ns/iter (± 8015162) 0.65
es/full/minify/libraries/terser 343546179 ns/iter (± 19517895) 419524765 ns/iter (± 182861368) 0.82
es/full/minify/libraries/three 673304939 ns/iter (± 161118457) 781105039 ns/iter (± 110409017) 0.86
es/full/minify/libraries/typescript 4058696990 ns/iter (± 432689285) 4533372439 ns/iter (± 328308100) 0.90
es/full/minify/libraries/victory 1035119104 ns/iter (± 81957917) 1604753837 ns/iter (± 454060892) 0.65
es/full/minify/libraries/vue 214614783 ns/iter (± 34639391) 320255077 ns/iter (± 103206906) 0.67
es/full/codegen/es3 36070 ns/iter (± 5112) 49719 ns/iter (± 18795) 0.73
es/full/codegen/es5 35433 ns/iter (± 7292) 51851 ns/iter (± 25454) 0.68
es/full/codegen/es2015 35853 ns/iter (± 15107) 55935 ns/iter (± 25655) 0.64
es/full/codegen/es2016 35049 ns/iter (± 9279) 49366 ns/iter (± 26311) 0.71
es/full/codegen/es2017 34279 ns/iter (± 1634) 45705 ns/iter (± 29225) 0.75
es/full/codegen/es2018 36767 ns/iter (± 9383) 52700 ns/iter (± 23260) 0.70
es/full/codegen/es2019 36438 ns/iter (± 4062) 48831 ns/iter (± 18070) 0.75
es/full/codegen/es2020 35327 ns/iter (± 4053) 54168 ns/iter (± 26606) 0.65
es/full/all/es3 234550773 ns/iter (± 52015717) 422078253 ns/iter (± 186865464) 0.56
es/full/all/es5 225804758 ns/iter (± 60999842) 377064672 ns/iter (± 166660389) 0.60
es/full/all/es2015 179881616 ns/iter (± 38238012) 273698308 ns/iter (± 99931206) 0.66
es/full/all/es2016 149473819 ns/iter (± 32927089) 253627489 ns/iter (± 117450674) 0.59
es/full/all/es2017 150960163 ns/iter (± 27867906) 197519714 ns/iter (± 152278960) 0.76
es/full/all/es2018 153103170 ns/iter (± 37764710) 248374563 ns/iter (± 111651417) 0.62
es/full/all/es2019 165812040 ns/iter (± 37663647) 254578822 ns/iter (± 152090668) 0.65
es/full/all/es2020 146518125 ns/iter (± 24347865) 254203046 ns/iter (± 134321014) 0.58
es/full/parser 772047 ns/iter (± 225819) 1042959 ns/iter (± 468453) 0.74
es/full/base/fixer 26776 ns/iter (± 1522) 33210 ns/iter (± 12059) 0.81
es/full/base/resolver_and_hygiene 93320 ns/iter (± 6347) 117078 ns/iter (± 72758) 0.80
serialization of ast node 218 ns/iter (± 10) 255 ns/iter (± 79) 0.85
serialization of serde 219 ns/iter (± 9) 244 ns/iter (± 291) 0.90

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

Please sign in to comment.