Skip to content

Commit

Permalink
fix(es/compat): Fix loose mode of the spread pass (#7608)
Browse files Browse the repository at this point in the history
**Related issue:** 

 - Closes #7354
  • Loading branch information
lsdyi committed Jul 7, 2023
1 parent 2ef7603 commit a7daa5b
Show file tree
Hide file tree
Showing 7 changed files with 51 additions and 1 deletion.
11 changes: 11 additions & 0 deletions crates/swc/tests/fixture/issues-7xxx/7354/case1/input/.swcrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"jsc": {
"parser": {
"syntax": "ecmascript",
"jsx": false
},
"target": "es5",
"loose": true
},
"isModule": false
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
const data = {}
const temp = [...data.demo, ...data.demo2]
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
var data = {};
var temp = [].concat(data.demo, data.demo2);
10 changes: 10 additions & 0 deletions crates/swc/tests/fixture/issues-7xxx/7354/case2/input/.swcrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"jsc": {
"parser": {
"syntax": "ecmascript",
"jsx": false
},
"target": "es5"
},
"isModule": false
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
const data = {}
const temp = [...data.demo, ...data.demo2]
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
var _to_consumable_array = require("@swc/helpers/_/_to_consumable_array");
var data = {};
var temp = _to_consumable_array._(data.demo).concat(_to_consumable_array._(data.demo2));
22 changes: 21 additions & 1 deletion crates/swc_ecma_transforms_compat/src/es2015/spread.rs
Original file line number Diff line number Diff line change
Expand Up @@ -251,6 +251,27 @@ impl Spread {
};
}

// shorthand [].concat(arr1, arr2) shoule be used under loose mode
if self.c.loose {
let mut arg_list = vec![];
for arg in args.flatten() {
let expr = arg.expr;
arg_list.push(expr.as_arg());
}

return Expr::Call(CallExpr {
span: DUMMY_SP,
callee: ArrayLit {
span: DUMMY_SP,
elems: vec![],
}
.make_member(quote_ident!("concat"))
.as_callee(),
args: arg_list,
type_args: Default::default(),
});
}

for arg in args {
if let Some(arg) = arg {
let ExprOrSpread { expr, spread } = arg;
Expand Down Expand Up @@ -338,7 +359,6 @@ impl Spread {
Expr::Call(to_consumable_array(expr, span))
};
}

to_consumable_array(expr, span).as_arg()
}
});
Expand Down

1 comment on commit a7daa5b

@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: a7daa5b Previous: d2ac2c1 Ratio
es/full/bugs-1 283983 ns/iter (± 1467) 285631 ns/iter (± 9151) 0.99
es/full/minify/libraries/antd 1312181534 ns/iter (± 8400074) 1299990443 ns/iter (± 9999522) 1.01
es/full/minify/libraries/d3 278593802 ns/iter (± 3559922) 276018893 ns/iter (± 7711417) 1.01
es/full/minify/libraries/echarts 1051700219 ns/iter (± 7816484) 1050212355 ns/iter (± 5668307) 1.00
es/full/minify/libraries/jquery 84979655 ns/iter (± 109305) 84569114 ns/iter (± 104345) 1.00
es/full/minify/libraries/lodash 98509006 ns/iter (± 189904) 98474121 ns/iter (± 206667) 1.00
es/full/minify/libraries/moment 50089826 ns/iter (± 44879) 49770103 ns/iter (± 81741) 1.01
es/full/minify/libraries/react 18031577 ns/iter (± 16661) 17974112 ns/iter (± 27148) 1.00
es/full/minify/libraries/terser 219605389 ns/iter (± 324078) 217347994 ns/iter (± 423190) 1.01
es/full/minify/libraries/three 384727937 ns/iter (± 2782730) 382722934 ns/iter (± 875748) 1.01
es/full/minify/libraries/typescript 2649291381 ns/iter (± 8053763) 2637732672 ns/iter (± 11159058) 1.00
es/full/minify/libraries/victory 556657840 ns/iter (± 4498258) 555289685 ns/iter (± 5146012) 1.00
es/full/minify/libraries/vue 119976592 ns/iter (± 412618) 120487294 ns/iter (± 178237) 1.00
es/full/codegen/es3 35495 ns/iter (± 97) 35231 ns/iter (± 121) 1.01
es/full/codegen/es5 35545 ns/iter (± 78) 35191 ns/iter (± 67) 1.01
es/full/codegen/es2015 35542 ns/iter (± 53) 35214 ns/iter (± 124) 1.01
es/full/codegen/es2016 35549 ns/iter (± 108) 35150 ns/iter (± 129) 1.01
es/full/codegen/es2017 35481 ns/iter (± 65) 35200 ns/iter (± 114) 1.01
es/full/codegen/es2018 35520 ns/iter (± 92) 35224 ns/iter (± 269) 1.01
es/full/codegen/es2019 35559 ns/iter (± 112) 35201 ns/iter (± 82) 1.01
es/full/codegen/es2020 35504 ns/iter (± 78) 35038 ns/iter (± 192) 1.01
es/full/all/es3 171850912 ns/iter (± 1157975) 173582531 ns/iter (± 691178) 0.99
es/full/all/es5 164707054 ns/iter (± 1024273) 166407156 ns/iter (± 1801503) 0.99
es/full/all/es2015 123513206 ns/iter (± 652572) 123808368 ns/iter (± 710692) 1.00
es/full/all/es2016 122844236 ns/iter (± 725269) 123451891 ns/iter (± 632335) 1.00
es/full/all/es2017 121839938 ns/iter (± 506334) 122489359 ns/iter (± 626260) 0.99
es/full/all/es2018 120134407 ns/iter (± 843293) 120456655 ns/iter (± 773323) 1.00
es/full/all/es2019 119414136 ns/iter (± 1242485) 120243183 ns/iter (± 667485) 0.99
es/full/all/es2020 114486275 ns/iter (± 447504) 115203953 ns/iter (± 398041) 0.99
es/full/parser 533550 ns/iter (± 5642) 530296 ns/iter (± 7536) 1.01
es/full/base/fixer 17398 ns/iter (± 87) 20452 ns/iter (± 121) 0.85
es/full/base/resolver_and_hygiene 79877 ns/iter (± 191) 80917 ns/iter (± 268) 0.99
serialization of serde 304 ns/iter (± 0) 323 ns/iter (± 0) 0.94
css/minify/libraries/bootstrap 28794150 ns/iter (± 46672) 29087197 ns/iter (± 115607) 0.99
css/visitor/compare/clone 1626688 ns/iter (± 3853) 1635134 ns/iter (± 5499) 0.99
css/visitor/compare/visit_mut_span 1755593 ns/iter (± 6835) 1767527 ns/iter (± 4446) 0.99
css/visitor/compare/visit_mut_span_panic 1829679 ns/iter (± 6889) 1841931 ns/iter (± 4641) 0.99
css/visitor/compare/fold_span 2564468 ns/iter (± 9497) 2587739 ns/iter (± 11255) 0.99
css/visitor/compare/fold_span_panic 2751650 ns/iter (± 15264) 2747899 ns/iter (± 15412) 1.00
css/lexer/bootstrap_5_1_3 4442149 ns/iter (± 6464) 4431159 ns/iter (± 2961) 1.00
css/lexer/foundation_6_7_4 3756929 ns/iter (± 2910) 3743498 ns/iter (± 6706) 1.00
css/lexer/tailwind_3_1_1 712226 ns/iter (± 887) 711894 ns/iter (± 1324) 1.00
css/parser/bootstrap_5_1_3 19631768 ns/iter (± 32456) 20150085 ns/iter (± 106457) 0.97
css/parser/foundation_6_7_4 15281275 ns/iter (± 36056) 16373248 ns/iter (± 15862) 0.93
css/parser/tailwind_3_1_1 2984921 ns/iter (± 2898) 3109204 ns/iter (± 4501) 0.96
es/codegen/colors 735239 ns/iter (± 405568) 735454 ns/iter (± 402299) 1.00
es/codegen/large 3141034 ns/iter (± 1671325) 3134841 ns/iter (± 1672154) 1.00
es/codegen/with-parser/colors 44489 ns/iter (± 512) 43875 ns/iter (± 485) 1.01
es/codegen/with-parser/large 487455 ns/iter (± 747) 485170 ns/iter (± 811) 1.00
es/minify/libraries/antd 1115315457 ns/iter (± 10270838) 1127062273 ns/iter (± 6424099) 0.99
es/minify/libraries/d3 239984526 ns/iter (± 481538) 240882500 ns/iter (± 429114) 1.00
es/minify/libraries/echarts 894223120 ns/iter (± 2448010) 899106257 ns/iter (± 2185040) 0.99
es/minify/libraries/jquery 73732973 ns/iter (± 80331) 73851913 ns/iter (± 201799) 1.00
es/minify/libraries/lodash 88457890 ns/iter (± 74958) 88692400 ns/iter (± 197707) 1.00
es/minify/libraries/moment 43631983 ns/iter (± 99780) 43747803 ns/iter (± 51049) 1.00
es/minify/libraries/react 16008283 ns/iter (± 40758) 16134454 ns/iter (± 60816) 0.99
es/minify/libraries/terser 186150193 ns/iter (± 189628) 187114194 ns/iter (± 457520) 0.99
es/minify/libraries/three 318917486 ns/iter (± 915537) 321131012 ns/iter (± 832124) 0.99
es/minify/libraries/typescript 2249353672 ns/iter (± 5506953) 2260071081 ns/iter (± 7206501) 1.00
es/minify/libraries/victory 471212225 ns/iter (± 2174055) 467965910 ns/iter (± 1027463) 1.01
es/minify/libraries/vue 107415661 ns/iter (± 136766) 107636332 ns/iter (± 186722) 1.00
es/visitor/compare/clone 1946636 ns/iter (± 4243) 1959977 ns/iter (± 4910) 0.99
es/visitor/compare/visit_mut_span 2289260 ns/iter (± 2928) 2301947 ns/iter (± 5222) 0.99
es/visitor/compare/visit_mut_span_panic 2314057 ns/iter (± 3104) 2331419 ns/iter (± 5300) 0.99
es/visitor/compare/fold_span 3360198 ns/iter (± 6249) 3365869 ns/iter (± 4709) 1.00
es/visitor/compare/fold_span_panic 3487642 ns/iter (± 6346) 3512774 ns/iter (± 10769) 0.99
es/lexer/colors 12236 ns/iter (± 50) 12606 ns/iter (± 65) 0.97
es/lexer/angular 5987452 ns/iter (± 13520) 6050152 ns/iter (± 16454) 0.99
es/lexer/backbone 766923 ns/iter (± 7743) 777638 ns/iter (± 354) 0.99
es/lexer/jquery 4337048 ns/iter (± 5735) 4418454 ns/iter (± 2159) 0.98
es/lexer/jquery mobile 6633527 ns/iter (± 16247) 6780992 ns/iter (± 4827) 0.98
es/lexer/mootools 3446234 ns/iter (± 2207) 3518056 ns/iter (± 6742) 0.98
es/lexer/underscore 637307 ns/iter (± 1866) 649973 ns/iter (± 398) 0.98
es/lexer/three 20483346 ns/iter (± 34713) 20861413 ns/iter (± 40956) 0.98
es/lexer/yui 3734088 ns/iter (± 2525) 3811789 ns/iter (± 4167) 0.98
es/parser/colors 26432 ns/iter (± 33) 26201 ns/iter (± 101) 1.01
es/parser/angular 13308371 ns/iter (± 57055) 13261755 ns/iter (± 35044) 1.00
es/parser/backbone 1980249 ns/iter (± 10538) 1967655 ns/iter (± 10216) 1.01
es/parser/jquery 10799353 ns/iter (± 30760) 10668990 ns/iter (± 47415) 1.01
es/parser/jquery mobile 16545275 ns/iter (± 43564) 16391725 ns/iter (± 34812) 1.01
es/parser/mootools 8303005 ns/iter (± 11371) 8225556 ns/iter (± 16670) 1.01
es/parser/underscore 1712843 ns/iter (± 14027) 1684166 ns/iter (± 9597) 1.02
es/parser/three 45840127 ns/iter (± 114176) 45501530 ns/iter (± 111633) 1.01
es/parser/yui 8193296 ns/iter (± 20133) 8133520 ns/iter (± 25939) 1.01
es/preset-env/usage/builtin_type 138368 ns/iter (± 33052) 136765 ns/iter (± 32144) 1.01
es/preset-env/usage/property 16783 ns/iter (± 56) 16811 ns/iter (± 39) 1.00
es/resolver/typescript 86711865 ns/iter (± 1094288) 86390618 ns/iter (± 1210577) 1.00
es/fixer/typescript 63706675 ns/iter (± 2197091) 62078444 ns/iter (± 1212459) 1.03
es/hygiene/typescript 127960713 ns/iter (± 263812) 128696350 ns/iter (± 430447) 0.99
es/resolver_with_hygiene/typescript 237315974 ns/iter (± 1143210) 237676785 ns/iter (± 1084554) 1.00
es/visitor/base-perf/module_clone 59247 ns/iter (± 281) 59449 ns/iter (± 256) 1.00
es/visitor/base-perf/fold_empty 63026 ns/iter (± 206) 64208 ns/iter (± 231) 0.98
es/visitor/base-perf/fold_noop_impl_all 63381 ns/iter (± 293) 63764 ns/iter (± 241) 0.99
es/visitor/base-perf/fold_noop_impl_vec 63703 ns/iter (± 903) 64401 ns/iter (± 385) 0.99
es/visitor/base-perf/boxing_boxed_clone 56 ns/iter (± 0) 57 ns/iter (± 0) 0.98
es/visitor/base-perf/boxing_unboxed_clone 41 ns/iter (± 0) 39 ns/iter (± 0) 1.05
es/visitor/base-perf/boxing_boxed 109 ns/iter (± 0) 109 ns/iter (± 0) 1
es/visitor/base-perf/boxing_unboxed 79 ns/iter (± 0) 80 ns/iter (± 0) 0.99
es/visitor/base-perf/visit_empty 0 ns/iter (± 0) 0 ns/iter (± 0) NaN
es/visitor/base-perf/visit_contains_this 2557 ns/iter (± 31) 2612 ns/iter (± 12) 0.98
es/base/parallel/resolver/typescript 4332115921 ns/iter (± 221833555) 3902177776 ns/iter (± 313180266) 1.11
es/base/parallel/hygiene/typescript 1463074088 ns/iter (± 23439009) 1431510204 ns/iter (± 15944366) 1.02
misc/visitors/time-complexity/time 5 148 ns/iter (± 1) 148 ns/iter (± 0) 1
misc/visitors/time-complexity/time 10 428 ns/iter (± 0) 421 ns/iter (± 8) 1.02
misc/visitors/time-complexity/time 15 794 ns/iter (± 0) 885 ns/iter (± 1) 0.90
misc/visitors/time-complexity/time 20 1286 ns/iter (± 2) 1287 ns/iter (± 5) 1.00
misc/visitors/time-complexity/time 40 4333 ns/iter (± 4) 4359 ns/iter (± 5) 0.99
misc/visitors/time-complexity/time 60 9044 ns/iter (± 19) 9039 ns/iter (± 20) 1.00
es/full-target/es2016 239677 ns/iter (± 590) 237092 ns/iter (± 1200) 1.01
es/full-target/es2017 226679 ns/iter (± 394) 225221 ns/iter (± 635) 1.01
es/full-target/es2018 214622 ns/iter (± 720) 213484 ns/iter (± 831) 1.01
es2020_nullish_coalescing 69420 ns/iter (± 425) 70739 ns/iter (± 5573) 0.98
es2020_optional_chaining 79518 ns/iter (± 306) 79418 ns/iter (± 413) 1.00
es2022_class_properties 119930 ns/iter (± 365) 120932 ns/iter (± 343) 0.99
es2018_object_rest_spread 74656 ns/iter (± 140) 77127 ns/iter (± 256) 0.97
es2019_optional_catch_binding 63021 ns/iter (± 180) 65521 ns/iter (± 351) 0.96
es2017_async_to_generator 62951 ns/iter (± 222) 64408 ns/iter (± 175) 0.98
es2016_exponentiation 67307 ns/iter (± 160) 69287 ns/iter (± 395) 0.97
es2015_arrow 70642 ns/iter (± 251) 71044 ns/iter (± 197) 0.99
es2015_block_scoped_fn 67920 ns/iter (± 221) 68474 ns/iter (± 174) 0.99
es2015_block_scoping 124098 ns/iter (± 703) 125216 ns/iter (± 604) 0.99

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

Please sign in to comment.