Skip to content

Commit

Permalink
fix(es/renamer): Handle rest params correctly (#6821)
Browse files Browse the repository at this point in the history
**Related issue:**

 - Closes #6819.
  • Loading branch information
kdy1 committed Jan 16, 2023
1 parent 179a5f8 commit ebce18b
Show file tree
Hide file tree
Showing 7 changed files with 38 additions and 4 deletions.
5 changes: 5 additions & 0 deletions crates/swc_ecma_minifier/tests/mangle/issue-6819/1/input.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
export function __CREATE_EXP__() {
return function EXP(...args) {
return value;
};
}
5 changes: 5 additions & 0 deletions crates/swc_ecma_minifier/tests/mangle/issue-6819/1/output.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
export function __CREATE_EXP__() {
return function n(...r) {
return value;
};
}
5 changes: 5 additions & 0 deletions crates/swc_ecma_minifier/tests/mangle/issue-6819/2/input.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
function __CREATE_EXP__(...args) {
return value;
}

export { }
4 changes: 4 additions & 0 deletions crates/swc_ecma_minifier/tests/mangle/issue-6819/2/output.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
function e(...n) {
return value;
}
export { };
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
function e(...e) {
console.log(...e);
function e(...o) {
console.log(...o);
}
var o = [
1,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
function o(o, ...n) {
console.log(o);
function o(n, ...c) {
console.log(n);
}
15 changes: 15 additions & 0 deletions crates/swc_ecma_transforms_base/src/rename/analyzer/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -270,7 +270,17 @@ impl Visit for Analyzer {
fn visit_fn_decl(&mut self, f: &FnDecl) {
self.add_decl(f.ident.to_id(), true);

// https://github.com/swc-project/swc/issues/6819
let has_rest = f.function.params.iter().any(|p| p.pat.is_rest());
if has_rest {
self.add_usage(f.ident.to_id());
}

self.with_fn_scope(|v| {
if has_rest {
v.add_usage(f.ident.to_id());
}

f.function.decorators.visit_with(v);
f.function.params.visit_with(v);
// WARN: Option<BlockStmt>::visit_mut_children_wth
Expand All @@ -284,6 +294,11 @@ impl Visit for Analyzer {
self.with_fn_scope(|v| {
v.add_decl(id.to_id(), true);
v.with_fn_scope(|v| {
// https://github.com/swc-project/swc/issues/6819
if f.function.params.iter().any(|p| p.pat.is_rest()) {
v.add_usage(id.to_id());
}

f.function.decorators.visit_with(v);
f.function.params.visit_with(v);
v.visit_fn_body_within_same_scope(&f.function.body);
Expand Down

1 comment on commit ebce18b

@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: ebce18b Previous: ebebd60 Ratio
es/full/bugs-1 293874 ns/iter (± 12609) 304515 ns/iter (± 7450) 0.97
es/full/minify/libraries/antd 1598048504 ns/iter (± 27998348) 1854877937 ns/iter (± 31292205) 0.86
es/full/minify/libraries/d3 311201701 ns/iter (± 6672393) 312642764 ns/iter (± 13335425) 1.00
es/full/minify/libraries/echarts 1255861328 ns/iter (± 11733311) 1381907367 ns/iter (± 25433493) 0.91
es/full/minify/libraries/jquery 91925514 ns/iter (± 1247565) 91833579 ns/iter (± 2132950) 1.00
es/full/minify/libraries/lodash 105605561 ns/iter (± 1626190) 109116610 ns/iter (± 1593623) 0.97
es/full/minify/libraries/moment 52652154 ns/iter (± 426998) 54411793 ns/iter (± 856876) 0.97
es/full/minify/libraries/react 19193628 ns/iter (± 94447) 19261678 ns/iter (± 166101) 1.00
es/full/minify/libraries/terser 256672986 ns/iter (± 6947039) 266904267 ns/iter (± 6290252) 0.96
es/full/minify/libraries/three 451771929 ns/iter (± 4627770) 489623040 ns/iter (± 13274416) 0.92
es/full/minify/libraries/typescript 3054289254 ns/iter (± 15421164) 3428460748 ns/iter (± 29308447) 0.89
es/full/minify/libraries/victory 638773305 ns/iter (± 11084749) 741289873 ns/iter (± 24994798) 0.86
es/full/minify/libraries/vue 128247763 ns/iter (± 1149093) 134819730 ns/iter (± 3097038) 0.95
es/full/codegen/es3 25537 ns/iter (± 169) 27791 ns/iter (± 72) 0.92
es/full/codegen/es5 25788 ns/iter (± 134) 27757 ns/iter (± 129) 0.93
es/full/codegen/es2015 26257 ns/iter (± 45) 27671 ns/iter (± 110) 0.95
es/full/codegen/es2016 25618 ns/iter (± 216) 27636 ns/iter (± 103) 0.93
es/full/codegen/es2017 25843 ns/iter (± 298) 27636 ns/iter (± 78) 0.94
es/full/codegen/es2018 25623 ns/iter (± 230) 27650 ns/iter (± 120) 0.93
es/full/codegen/es2019 25842 ns/iter (± 270) 27662 ns/iter (± 59) 0.93
es/full/codegen/es2020 25503 ns/iter (± 237) 27660 ns/iter (± 69) 0.92
es/full/all/es3 172414095 ns/iter (± 4283762) 170640653 ns/iter (± 3765234) 1.01
es/full/all/es5 165886122 ns/iter (± 3155249) 161551892 ns/iter (± 3211046) 1.03
es/full/all/es2015 124433495 ns/iter (± 1738345) 121008773 ns/iter (± 904803) 1.03
es/full/all/es2016 121776140 ns/iter (± 1807244) 119084216 ns/iter (± 1141781) 1.02
es/full/all/es2017 120866915 ns/iter (± 1015947) 118727818 ns/iter (± 1066007) 1.02
es/full/all/es2018 119544832 ns/iter (± 1133695) 116879747 ns/iter (± 1365651) 1.02
es/full/all/es2019 118486139 ns/iter (± 897446) 115794814 ns/iter (± 1203764) 1.02
es/full/all/es2020 114300786 ns/iter (± 1041062) 112165781 ns/iter (± 817712) 1.02
es/full/parser 533028 ns/iter (± 6489) 514672 ns/iter (± 7100) 1.04
es/full/base/fixer 21846 ns/iter (± 86) 22163 ns/iter (± 137) 0.99
es/full/base/resolver_and_hygiene 78080 ns/iter (± 617) 77632 ns/iter (± 103) 1.01
serialization of ast node 141 ns/iter (± 1) 118 ns/iter (± 0) 1.19
serialization of serde 126 ns/iter (± 1) 122 ns/iter (± 0) 1.03
css/minify/libraries/bootstrap 27285113 ns/iter (± 152708) 27809179 ns/iter (± 214535) 0.98
css/visitor/compare/clone 2054116 ns/iter (± 15176) 2068165 ns/iter (± 6849) 0.99
css/visitor/compare/visit_mut_span 2232090 ns/iter (± 18230) 2251975 ns/iter (± 8885) 0.99
css/visitor/compare/visit_mut_span_panic 2248800 ns/iter (± 14813) 2315802 ns/iter (± 7145) 0.97
css/visitor/compare/fold_span 2989732 ns/iter (± 22176) 3042551 ns/iter (± 18630) 0.98
css/visitor/compare/fold_span_panic 3116077 ns/iter (± 15928) 3171105 ns/iter (± 25660) 0.98
css/lexer/bootstrap_5_1_3 5007298 ns/iter (± 31600) 5206138 ns/iter (± 10404) 0.96
css/lexer/foundation_6_7_4 4232242 ns/iter (± 24077) 4353362 ns/iter (± 17650) 0.97
css/lexer/tailwind_3_1_1 824405 ns/iter (± 2613) 823250 ns/iter (± 3233) 1.00
css/parser/bootstrap_5_1_3 21214646 ns/iter (± 136005) 22155424 ns/iter (± 233696) 0.96
css/parser/foundation_6_7_4 16916172 ns/iter (± 112359) 17508096 ns/iter (± 124496) 0.97
css/parser/tailwind_3_1_1 3238590 ns/iter (± 22626) 3326884 ns/iter (± 10777) 0.97
es/codegen/colors 333930 ns/iter (± 189090) 325743 ns/iter (± 182951) 1.03
es/codegen/large 1164002 ns/iter (± 600853) 1237413 ns/iter (± 629214) 0.94
es/codegen/with-parser/colors 47400 ns/iter (± 444) 44955 ns/iter (± 953) 1.05
es/codegen/with-parser/large 523719 ns/iter (± 3784) 509196 ns/iter (± 1370) 1.03
es/minify/libraries/antd 1334618558 ns/iter (± 20366575) 1580132941 ns/iter (± 26952827) 0.84
es/minify/libraries/d3 243162009 ns/iter (± 3194566) 263494710 ns/iter (± 6421313) 0.92
es/minify/libraries/echarts 1025557647 ns/iter (± 11985688) 1213845562 ns/iter (± 35480726) 0.84
es/minify/libraries/jquery 75751966 ns/iter (± 531977) 79566186 ns/iter (± 1496004) 0.95
es/minify/libraries/lodash 92414942 ns/iter (± 835116) 98800095 ns/iter (± 2941700) 0.94
es/minify/libraries/moment 44991427 ns/iter (± 491662) 46864140 ns/iter (± 494185) 0.96
es/minify/libraries/react 16732176 ns/iter (± 155469) 17221228 ns/iter (± 468732) 0.97
es/minify/libraries/terser 204507521 ns/iter (± 2425770) 229303054 ns/iter (± 4420781) 0.89
es/minify/libraries/three 343756803 ns/iter (± 3936546) 404202903 ns/iter (± 8538797) 0.85
es/minify/libraries/typescript 2536214937 ns/iter (± 11239732) 2898973144 ns/iter (± 19516617) 0.87
es/minify/libraries/victory 530906029 ns/iter (± 10978787) 644451634 ns/iter (± 24894660) 0.82
es/minify/libraries/vue 113623633 ns/iter (± 846301) 121361452 ns/iter (± 2028366) 0.94
es/visitor/compare/clone 2361919 ns/iter (± 35677) 2453217 ns/iter (± 21000) 0.96
es/visitor/compare/visit_mut_span 2732234 ns/iter (± 15440) 2819075 ns/iter (± 8979) 0.97
es/visitor/compare/visit_mut_span_panic 2764865 ns/iter (± 17015) 2865932 ns/iter (± 9565) 0.96
es/visitor/compare/fold_span 3813837 ns/iter (± 18591) 3954756 ns/iter (± 16213) 0.96
es/visitor/compare/fold_span_panic 3979635 ns/iter (± 29623) 4125534 ns/iter (± 29372) 0.96
es/lexer/colors 16815 ns/iter (± 218) 17398 ns/iter (± 34) 0.97
es/lexer/angular 8061280 ns/iter (± 48609) 8282341 ns/iter (± 13137) 0.97
es/lexer/backbone 1058288 ns/iter (± 5004) 1079328 ns/iter (± 597) 0.98
es/lexer/jquery 5929974 ns/iter (± 54282) 5964923 ns/iter (± 25315) 0.99
es/lexer/jquery mobile 9114081 ns/iter (± 59619) 9226574 ns/iter (± 15310) 0.99
es/lexer/mootools 4648220 ns/iter (± 35194) 4717838 ns/iter (± 10102) 0.99
es/lexer/underscore 892450 ns/iter (± 6120) 905361 ns/iter (± 1698) 0.99
es/lexer/three 27631730 ns/iter (± 122180) 28103642 ns/iter (± 59289) 0.98
es/lexer/yui 5021464 ns/iter (± 56309) 5079161 ns/iter (± 6569) 0.99
es/parser/colors 30831 ns/iter (± 359) 31451 ns/iter (± 171) 0.98
es/parser/angular 15517857 ns/iter (± 283626) 16491140 ns/iter (± 361325) 0.94
es/parser/backbone 2329843 ns/iter (± 12807) 2349262 ns/iter (± 13308) 0.99
es/parser/jquery 12676346 ns/iter (± 75873) 13183280 ns/iter (± 482297) 0.96
es/parser/jquery mobile 19619590 ns/iter (± 562983) 21336885 ns/iter (± 553534) 0.92
es/parser/mootools 9492645 ns/iter (± 112535) 9715211 ns/iter (± 141412) 0.98
es/parser/underscore 1965723 ns/iter (± 10531) 1991522 ns/iter (± 10995) 0.99
es/parser/three 59304169 ns/iter (± 765142) 62558964 ns/iter (± 816921) 0.95
es/parser/yui 9645966 ns/iter (± 113084) 9813364 ns/iter (± 71455) 0.98
es/preset-env/usage/builtin_type 139178 ns/iter (± 31262) 138415 ns/iter (± 30054) 1.01
es/preset-env/usage/property 21146 ns/iter (± 113) 21281 ns/iter (± 119) 0.99
es/resolver/typescript 108014463 ns/iter (± 1855086) 122715983 ns/iter (± 2291553) 0.88
es/fixer/typescript 83712611 ns/iter (± 444079) 98348642 ns/iter (± 1823031) 0.85
es/hygiene/typescript 176897823 ns/iter (± 1383900) 195612488 ns/iter (± 2717438) 0.90
es/resolver_with_hygiene/typescript 311483489 ns/iter (± 3351591) 336849247 ns/iter (± 2560062) 0.92
es/visitor/base-perf/module_clone 74642 ns/iter (± 1351) 75178 ns/iter (± 1776) 0.99
es/visitor/base-perf/fold_empty 85053 ns/iter (± 1999) 84980 ns/iter (± 1293) 1.00
es/visitor/base-perf/fold_noop_impl_all 85773 ns/iter (± 1433) 85162 ns/iter (± 1803) 1.01
es/visitor/base-perf/fold_noop_impl_vec 84491 ns/iter (± 779) 85024 ns/iter (± 1588) 0.99
es/visitor/base-perf/boxing_boxed_clone 54 ns/iter (± 0) 56 ns/iter (± 0) 0.96
es/visitor/base-perf/boxing_unboxed_clone 57 ns/iter (± 0) 59 ns/iter (± 0) 0.97
es/visitor/base-perf/boxing_boxed 101 ns/iter (± 0) 105 ns/iter (± 0) 0.96
es/visitor/base-perf/boxing_unboxed 101 ns/iter (± 0) 104 ns/iter (± 0) 0.97
es/visitor/base-perf/visit_contains_this 3473 ns/iter (± 85) 3446 ns/iter (± 63) 1.01
es/base/parallel/resolver/typescript 4554479373 ns/iter (± 380697519) 6081347069 ns/iter (± 656318154) 0.75
es/base/parallel/hygiene/typescript 2088826432 ns/iter (± 23924285) 2381054387 ns/iter (± 53427394) 0.88
misc/visitors/time-complexity/time 5 103 ns/iter (± 0) 106 ns/iter (± 0) 0.97
misc/visitors/time-complexity/time 10 319 ns/iter (± 9) 343 ns/iter (± 1) 0.93
misc/visitors/time-complexity/time 15 694 ns/iter (± 2) 672 ns/iter (± 2) 1.03
misc/visitors/time-complexity/time 20 1236 ns/iter (± 30) 1279 ns/iter (± 16) 0.97
misc/visitors/time-complexity/time 40 6402 ns/iter (± 47) 6712 ns/iter (± 20) 0.95
misc/visitors/time-complexity/time 60 16539 ns/iter (± 102) 17249 ns/iter (± 50) 0.96
es/full-target/es2016 184477 ns/iter (± 1066) 187375 ns/iter (± 1150) 0.98
es/full-target/es2017 176772 ns/iter (± 944) 183338 ns/iter (± 479) 0.96
es/full-target/es2018 166991 ns/iter (± 1640) 172585 ns/iter (± 839) 0.97
es2020_nullish_coalescing 64983 ns/iter (± 6658) 66933 ns/iter (± 265) 0.97
es2020_optional_chaining 92803 ns/iter (± 483) 95972 ns/iter (± 367) 0.97
es2022_class_properties 90703 ns/iter (± 312) 93348 ns/iter (± 367) 0.97
es2018_object_rest_spread 69923 ns/iter (± 506) 71207 ns/iter (± 155) 0.98
es2019_optional_catch_binding 60198 ns/iter (± 592) 61097 ns/iter (± 179) 0.99
es2017_async_to_generator 59695 ns/iter (± 348) 61259 ns/iter (± 98) 0.97
es2016_exponentiation 62929 ns/iter (± 545) 64736 ns/iter (± 64) 0.97
es2015_arrow 67450 ns/iter (± 314) 69884 ns/iter (± 169) 0.97
es2015_block_scoped_fn 63448 ns/iter (± 595) 66217 ns/iter (± 113) 0.96
es2015_block_scoping 134902 ns/iter (± 6314) 139303 ns/iter (± 9249) 0.97
es2015_classes 113457 ns/iter (± 834) 118239 ns/iter (± 549) 0.96
es2015_computed_props 59493 ns/iter (± 665) 61183 ns/iter (± 74) 0.97
es2015_destructuring 112279 ns/iter (± 829) 115942 ns/iter (± 175) 0.97
es2015_duplicate_keys 62071 ns/iter (± 386) 64011 ns/iter (± 107) 0.97
es2015_parameters 76700 ns/iter (± 440) 79995 ns/iter (± 153) 0.96
es2015_fn_name 64188 ns/iter (± 584) 66999 ns/iter (± 581) 0.96
es2015_for_of 62477 ns/iter (± 546) 64646 ns/iter (± 138) 0.97
es2015_instanceof 61048 ns/iter (± 434) 63244 ns/iter (± 121) 0.97
es2015_shorthand_property 59039 ns/iter (± 209) 60950 ns/iter (± 126) 0.97
es2015_spread 59022 ns/iter (± 238) 60927 ns/iter (± 93) 0.97
es2015_sticky_regex 60288 ns/iter (± 423) 62380 ns/iter (± 171) 0.97
es2015_typeof_symbol 60971 ns/iter (± 475) 62387 ns/iter (± 111) 0.98
es/transform/baseline/base 50880 ns/iter (± 452) 51639 ns/iter (± 121) 0.99
es/transform/baseline/common_reserved_word 61124 ns/iter (± 358) 62584 ns/iter (± 118) 0.98
es/transform/baseline/common_typescript 137835 ns/iter (± 1340) 159609 ns/iter (± 10323) 0.86
es/target/es3 164259 ns/iter (± 575) 169654 ns/iter (± 297) 0.97
es/target/es2015 609265 ns/iter (± 3517) 628934 ns/iter (± 1386) 0.97
es/target/es2016 63042 ns/iter (± 449) 64944 ns/iter (± 100) 0.97
es/target/es2017 59576 ns/iter (± 372) 61500 ns/iter (± 164) 0.97
es/target/es2018 79397 ns/iter (± 737) 81718 ns/iter (± 214) 0.97
es/target/es2020 129938 ns/iter (± 690) 133295 ns/iter (± 201) 0.97
babelify-only 671901 ns/iter (± 1068) 679443 ns/iter (± 1903) 0.99
parse_and_babelify_angular 41023234 ns/iter (± 247503) 43716373 ns/iter (± 1152575) 0.94
parse_and_babelify_backbone 5285460 ns/iter (± 55359) 5495032 ns/iter (± 88133) 0.96
parse_and_babelify_jquery 30505748 ns/iter (± 297407) 34047966 ns/iter (± 1021052) 0.90
parse_and_babelify_jquery_mobile 52200386 ns/iter (± 484325) 57912546 ns/iter (± 1302472) 0.90
parse_and_babelify_mootools 30784422 ns/iter (± 391397) 35732046 ns/iter (± 605422) 0.86
parse_and_babelify_underscore 4345302 ns/iter (± 18139) 4308161 ns/iter (± 30447) 1.01
parse_and_babelify_yui 30551817 ns/iter (± 281775) 33758447 ns/iter (± 687630) 0.91
html/minify/document/css_spec 40082976 ns/iter (± 691354) 43116740 ns/iter (± 752874) 0.93
html/minify/document/github 17076074 ns/iter (± 134737) 17494318 ns/iter (± 171793) 0.98
html/minify/document/stackoverflow 15194267 ns/iter (± 102299) 15886221 ns/iter (± 101718) 0.96
html/minify/document_fragment/css_spec 38495341 ns/iter (± 262793) 40543382 ns/iter (± 446372) 0.95
html/minify/document_fragment/github 16459753 ns/iter (± 117483) 16849744 ns/iter (± 144672) 0.98
html/minify/document_fragment/stackoverflow 14752946 ns/iter (± 80666) 15446844 ns/iter (± 239104) 0.96
html/document/visitor/compare/clone 332974 ns/iter (± 3350) 338457 ns/iter (± 2344) 0.98
html/document/visitor/compare/visit_mut_span 353300 ns/iter (± 2503) 366213 ns/iter (± 2272) 0.96
html/document/visitor/compare/visit_mut_span_panic 361910 ns/iter (± 1832) 371525 ns/iter (± 2180) 0.97
html/document/visitor/compare/fold_span 394807 ns/iter (± 4557) 409141 ns/iter (± 2011) 0.96
html/document/visitor/compare/fold_span_panic 452377 ns/iter (± 1824) 458760 ns/iter (± 2214) 0.99
html/document_fragment/visitor/compare/clone 328795 ns/iter (± 3190) 337284 ns/iter (± 1448) 0.97
html/document_fragment/visitor/compare/visit_mut_span 359982 ns/iter (± 4226) 364126 ns/iter (± 2801) 0.99
html/document_fragment/visitor/compare/visit_mut_span_panic 368537 ns/iter (± 3436) 368774 ns/iter (± 1157) 1.00
html/document_fragment/visitor/compare/fold_span 393564 ns/iter (± 2996) 400124 ns/iter (± 2901) 0.98
html/document_fragment/visitor/compare/fold_span_panic 446357 ns/iter (± 4930) 465596 ns/iter (± 1943) 0.96
html/lexer/css_2021_spec 15397269 ns/iter (± 126041) 15594973 ns/iter (± 84813) 0.99
html/lexer/github_com_17_05_2022 5890262 ns/iter (± 29701) 6039844 ns/iter (± 10106) 0.98
html/lexer/stackoverflow_com_17_05_2022 5515170 ns/iter (± 55538) 5630534 ns/iter (± 15601) 0.98
html/parser/parser_document/css_2021_spec 25180025 ns/iter (± 249252) 25984017 ns/iter (± 299475) 0.97
html/parser/parser_document/github_com_17_05_2022 8606944 ns/iter (± 60821) 8750039 ns/iter (± 25074) 0.98
html/parser/parser_document/stackoverflow_com_17_05_2022 7622500 ns/iter (± 60573) 7681354 ns/iter (± 16224) 0.99
html/parser/parser_document_fragment/css_2021_spec 25069719 ns/iter (± 185487) 26101068 ns/iter (± 475956) 0.96
html/parser/parser_document_fragment/github_com_17_05_2022 8630540 ns/iter (± 61227) 8767930 ns/iter (± 18351) 0.98
html/parser/parser_document_fragment/stackoverflow_com_17_05_2022 7589536 ns/iter (± 35308) 7670153 ns/iter (± 25933) 0.99

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

Please sign in to comment.