Skip to content

Commit

Permalink
fix(es/minifier): Abort sequential inliner on optional chaining (#6637)
Browse files Browse the repository at this point in the history
**Related issue:**

 - Closes #6636.
  • Loading branch information
kdy1 committed Dec 14, 2022
1 parent 4986694 commit e4e4d6c
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 1 deletion.
4 changes: 3 additions & 1 deletion crates/swc_ecma_minifier/src/compress/optimize/sequences.rs
Expand Up @@ -1546,7 +1546,9 @@ where
}

match b {
Expr::Update(..) | Expr::Arrow(..) | Expr::Fn(..) => return Ok(false),
Expr::Update(..) | Expr::Arrow(..) | Expr::Fn(..) | Expr::OptChain(..) => {
return Ok(false)
}

Expr::Cond(b) => {
trace_op!("seq: Try test of cond");
Expand Down
@@ -0,0 +1,7 @@
{
"passes": 2,
"toplevel": true,
"defaults": true,
"sequences": true,
"collapse_vars": true
}
8 changes: 8 additions & 0 deletions crates/swc_ecma_minifier/tests/fixture/issues/6636/input.js
@@ -0,0 +1,8 @@
export function memo(fn, opts) {
let result;
return () => {
result = fn(...newDeps);
opts?.onChange?.(result);
return result;
};
}
4 changes: 4 additions & 0 deletions crates/swc_ecma_minifier/tests/fixture/issues/6636/output.js
@@ -0,0 +1,4 @@
export function memo(fn, opts) {
let result;
return ()=>(result = fn(...newDeps), opts?.onChange?.(result), result);
}

1 comment on commit e4e4d6c

@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: e4e4d6c Previous: be5ea7f Ratio
es/full/bugs-1 299433 ns/iter (± 18704) 305180 ns/iter (± 8562) 0.98
es/full/minify/libraries/antd 1626232816 ns/iter (± 15620583) 1821727644 ns/iter (± 12673173) 0.89
es/full/minify/libraries/d3 333611911 ns/iter (± 5536587) 351660191 ns/iter (± 5768160) 0.95
es/full/minify/libraries/echarts 1405835474 ns/iter (± 14542912) 1545893761 ns/iter (± 15978758) 0.91
es/full/minify/libraries/jquery 92221038 ns/iter (± 967960) 96743209 ns/iter (± 819669) 0.95
es/full/minify/libraries/lodash 110616947 ns/iter (± 1757873) 116157166 ns/iter (± 1797017) 0.95
es/full/minify/libraries/moment 53278394 ns/iter (± 690598) 56330212 ns/iter (± 524342) 0.95
es/full/minify/libraries/react 19743294 ns/iter (± 335990) 20779444 ns/iter (± 269910) 0.95
es/full/minify/libraries/terser 256926888 ns/iter (± 3093971) 287685880 ns/iter (± 7139778) 0.89
es/full/minify/libraries/three 471768023 ns/iter (± 6628468) 545341462 ns/iter (± 9935480) 0.87
es/full/minify/libraries/typescript 3070819297 ns/iter (± 24547972) 3476360428 ns/iter (± 23573410) 0.88
es/full/minify/libraries/victory 675538048 ns/iter (± 8534132) 807338179 ns/iter (± 15556870) 0.84
es/full/minify/libraries/vue 135247028 ns/iter (± 1946211) 145229267 ns/iter (± 3185360) 0.93
es/full/codegen/es3 28457 ns/iter (± 104) 27950 ns/iter (± 70) 1.02
es/full/codegen/es5 28446 ns/iter (± 39) 27995 ns/iter (± 56) 1.02
es/full/codegen/es2015 28450 ns/iter (± 68) 27961 ns/iter (± 42) 1.02
es/full/codegen/es2016 28420 ns/iter (± 71) 27947 ns/iter (± 50) 1.02
es/full/codegen/es2017 28480 ns/iter (± 83) 27955 ns/iter (± 93) 1.02
es/full/codegen/es2018 28540 ns/iter (± 45) 27946 ns/iter (± 53) 1.02
es/full/codegen/es2019 28456 ns/iter (± 44) 27953 ns/iter (± 32) 1.02
es/full/codegen/es2020 28490 ns/iter (± 87) 27953 ns/iter (± 51) 1.02
es/full/all/es3 167756246 ns/iter (± 3366952) 171510483 ns/iter (± 1528953) 0.98
es/full/all/es5 160496324 ns/iter (± 3280817) 165261229 ns/iter (± 1809579) 0.97
es/full/all/es2015 120257407 ns/iter (± 919529) 122017717 ns/iter (± 1706313) 0.99
es/full/all/es2016 122167821 ns/iter (± 1832109) 121910969 ns/iter (± 1635779) 1.00
es/full/all/es2017 119360856 ns/iter (± 1141148) 120955127 ns/iter (± 808261) 0.99
es/full/all/es2018 118101182 ns/iter (± 1654961) 119899035 ns/iter (± 1333914) 0.99
es/full/all/es2019 117329299 ns/iter (± 891268) 117969844 ns/iter (± 1411067) 0.99
es/full/all/es2020 113327928 ns/iter (± 1787787) 114273813 ns/iter (± 1861377) 0.99
es/full/parser 510695 ns/iter (± 7136) 521632 ns/iter (± 8513) 0.98
es/full/base/fixer 22076 ns/iter (± 34) 22029 ns/iter (± 78) 1.00
es/full/base/resolver_and_hygiene 77771 ns/iter (± 97) 77985 ns/iter (± 91) 1.00
serialization of ast node 161 ns/iter (± 0) 142 ns/iter (± 0) 1.13
serialization of serde 126 ns/iter (± 0) 127 ns/iter (± 0) 0.99
css/minify/libraries/bootstrap 27053336 ns/iter (± 64260) 28467119 ns/iter (± 267891) 0.95
css/visitor/compare/clone 2115201 ns/iter (± 8857) 2115270 ns/iter (± 11946) 1.00
css/visitor/compare/visit_mut_span 2308505 ns/iter (± 6436) 2329817 ns/iter (± 19132) 0.99
css/visitor/compare/visit_mut_span_panic 2343089 ns/iter (± 7483) 2346966 ns/iter (± 10133) 1.00
css/visitor/compare/fold_span 3023430 ns/iter (± 27152) 3040387 ns/iter (± 32638) 0.99
css/visitor/compare/fold_span_panic 3139339 ns/iter (± 27395) 3152494 ns/iter (± 21674) 1.00
css/lexer/bootstrap_5_1_3 5195039 ns/iter (± 5260) 5196663 ns/iter (± 11221) 1.00
css/lexer/foundation_6_7_4 4401551 ns/iter (± 4586) 4451595 ns/iter (± 2072) 0.99
css/lexer/tailwind_3_1_1 826341 ns/iter (± 542) 834809 ns/iter (± 749) 0.99
css/parser/bootstrap_5_1_3 20657876 ns/iter (± 46703) 21010217 ns/iter (± 98606) 0.98
css/parser/foundation_6_7_4 16560747 ns/iter (± 101193) 16838495 ns/iter (± 97222) 0.98
css/parser/tailwind_3_1_1 3186149 ns/iter (± 2285) 3181769 ns/iter (± 3430) 1.00
es/codegen/colors 326618 ns/iter (± 182990) 322493 ns/iter (± 180703) 1.01
es/codegen/large 1240883 ns/iter (± 627669) 1236856 ns/iter (± 643500) 1.00
es/codegen/with-parser/colors 45473 ns/iter (± 435) 45559 ns/iter (± 110) 1.00
es/codegen/with-parser/large 513692 ns/iter (± 2248) 515044 ns/iter (± 1925) 1.00
es/minify/libraries/antd 1418475939 ns/iter (± 9416368) 1568584216 ns/iter (± 19363812) 0.90
es/minify/libraries/d3 287448463 ns/iter (± 5727087) 295949459 ns/iter (± 5927991) 0.97
es/minify/libraries/echarts 1211713336 ns/iter (± 15291257) 1287150182 ns/iter (± 10634515) 0.94
es/minify/libraries/jquery 79669683 ns/iter (± 1150208) 80992645 ns/iter (± 1565303) 0.98
es/minify/libraries/lodash 97599042 ns/iter (± 785136) 99878726 ns/iter (± 1767122) 0.98
es/minify/libraries/moment 46291122 ns/iter (± 405462) 46765452 ns/iter (± 570470) 0.99
es/minify/libraries/react 17449239 ns/iter (± 271709) 17766031 ns/iter (± 277651) 0.98
es/minify/libraries/terser 218835906 ns/iter (± 2262928) 226771050 ns/iter (± 5669871) 0.97
es/minify/libraries/three 388569218 ns/iter (± 5867866) 425116357 ns/iter (± 10360983) 0.91
es/minify/libraries/typescript 2654368341 ns/iter (± 12815825) 2911120660 ns/iter (± 36184541) 0.91
es/minify/libraries/victory 574555195 ns/iter (± 12623719) 616969001 ns/iter (± 11884979) 0.93
es/minify/libraries/vue 119376583 ns/iter (± 2282741) 120878183 ns/iter (± 1306192) 0.99
es/visitor/compare/clone 2421477 ns/iter (± 30440) 2415878 ns/iter (± 14787) 1.00
es/visitor/compare/visit_mut_span 2829008 ns/iter (± 15440) 2782845 ns/iter (± 7919) 1.02
es/visitor/compare/visit_mut_span_panic 2871575 ns/iter (± 9397) 2855521 ns/iter (± 2441) 1.01
es/visitor/compare/fold_span 3982781 ns/iter (± 47724) 3942633 ns/iter (± 10578) 1.01
es/visitor/compare/fold_span_panic 4099937 ns/iter (± 7792) 4090972 ns/iter (± 44564) 1.00
es/lexer/colors 17364 ns/iter (± 24) 17559 ns/iter (± 17) 0.99
es/lexer/angular 8242480 ns/iter (± 6566) 8242797 ns/iter (± 3638) 1.00
es/lexer/backbone 1077334 ns/iter (± 1444) 1075689 ns/iter (± 435) 1.00
es/lexer/jquery 5972973 ns/iter (± 11405) 5962106 ns/iter (± 20407) 1.00
es/lexer/jquery mobile 9208351 ns/iter (± 8175) 9184496 ns/iter (± 5087) 1.00
es/lexer/mootools 4684491 ns/iter (± 2813) 4682830 ns/iter (± 2194) 1.00
es/lexer/underscore 896995 ns/iter (± 1572) 897714 ns/iter (± 374) 1.00
es/lexer/three 27982188 ns/iter (± 38175) 27993630 ns/iter (± 42112) 1.00
es/lexer/yui 5053541 ns/iter (± 1453) 5063631 ns/iter (± 1920) 1.00
es/parser/colors 30954 ns/iter (± 175) 31275 ns/iter (± 179) 0.99
es/parser/angular 16116953 ns/iter (± 144473) 16523626 ns/iter (± 216865) 0.98
es/parser/backbone 2330480 ns/iter (± 10874) 2348448 ns/iter (± 13297) 0.99
es/parser/jquery 12835828 ns/iter (± 157933) 12903045 ns/iter (± 112459) 0.99
es/parser/jquery mobile 20355035 ns/iter (± 299088) 21493787 ns/iter (± 576045) 0.95
es/parser/mootools 9637606 ns/iter (± 73482) 9929643 ns/iter (± 100876) 0.97
es/parser/underscore 1979843 ns/iter (± 10585) 1988138 ns/iter (± 11732) 1.00
es/parser/three 59081327 ns/iter (± 412221) 62020623 ns/iter (± 253790) 0.95
es/parser/yui 9750696 ns/iter (± 92096) 9839479 ns/iter (± 91459) 0.99
es/preset-env/usage/builtin_type 143844 ns/iter (± 33506) 139730 ns/iter (± 31062) 1.03
es/preset-env/usage/property 21394 ns/iter (± 108) 21394 ns/iter (± 74) 1
es/resolver/typescript 110286926 ns/iter (± 1639109) 121319696 ns/iter (± 2564322) 0.91
es/fixer/typescript 86708097 ns/iter (± 1118326) 96045068 ns/iter (± 1321318) 0.90
es/hygiene/typescript 169138590 ns/iter (± 2426743) 197160509 ns/iter (± 1463961) 0.86
es/resolver_with_hygiene/typescript 299457886 ns/iter (± 4037017) 335480084 ns/iter (± 3687895) 0.89
es/visitor/base-perf/module_clone 74168 ns/iter (± 640) 74837 ns/iter (± 1378) 0.99
es/visitor/base-perf/fold_empty 85938 ns/iter (± 1881) 87906 ns/iter (± 1519) 0.98
es/visitor/base-perf/fold_noop_impl_all 85940 ns/iter (± 928) 86983 ns/iter (± 1224) 0.99
es/visitor/base-perf/fold_noop_impl_vec 86324 ns/iter (± 1225) 88044 ns/iter (± 1271) 0.98
es/visitor/base-perf/boxing_boxed_clone 56 ns/iter (± 0) 56 ns/iter (± 0) 1
es/visitor/base-perf/boxing_unboxed_clone 58 ns/iter (± 0) 58 ns/iter (± 0) 1
es/visitor/base-perf/boxing_boxed 103 ns/iter (± 0) 103 ns/iter (± 0) 1
es/visitor/base-perf/boxing_unboxed 102 ns/iter (± 0) 101 ns/iter (± 0) 1.01
es/visitor/base-perf/visit_contains_this 3552 ns/iter (± 46) 3405 ns/iter (± 52) 1.04
es/base/parallel/resolver/typescript 5328541224 ns/iter (± 428587174) 5648087437 ns/iter (± 360556699) 0.94
es/base/parallel/hygiene/typescript 1986643377 ns/iter (± 27521604) 2297920286 ns/iter (± 39827223) 0.86
misc/visitors/time-complexity/time 5 102 ns/iter (± 0) 107 ns/iter (± 0) 0.95
misc/visitors/time-complexity/time 10 344 ns/iter (± 2) 327 ns/iter (± 0) 1.05
misc/visitors/time-complexity/time 15 672 ns/iter (± 0) 667 ns/iter (± 0) 1.01
misc/visitors/time-complexity/time 20 1218 ns/iter (± 1) 1227 ns/iter (± 0) 0.99
misc/visitors/time-complexity/time 40 6652 ns/iter (± 27) 6208 ns/iter (± 1) 1.07
misc/visitors/time-complexity/time 60 17028 ns/iter (± 25) 15641 ns/iter (± 22) 1.09
es/full-target/es2016 188176 ns/iter (± 629) 187053 ns/iter (± 517) 1.01
es/full-target/es2017 181526 ns/iter (± 742) 181438 ns/iter (± 540) 1.00
es/full-target/es2018 170870 ns/iter (± 717) 169778 ns/iter (± 298) 1.01
es2020_nullish_coalescing 65597 ns/iter (± 155) 66073 ns/iter (± 55) 0.99
es2020_optional_chaining 95376 ns/iter (± 8791) 94674 ns/iter (± 6929) 1.01
es2022_class_properties 92970 ns/iter (± 157) 91736 ns/iter (± 186) 1.01
es2018_object_rest_spread 70345 ns/iter (± 178) 70697 ns/iter (± 122) 1.00
es2019_optional_catch_binding 60238 ns/iter (± 117) 60391 ns/iter (± 85) 1.00
es2017_async_to_generator 60809 ns/iter (± 66) 60930 ns/iter (± 110) 1.00
es2016_exponentiation 64096 ns/iter (± 137) 64044 ns/iter (± 115) 1.00
es2015_arrow 68934 ns/iter (± 227) 69032 ns/iter (± 190) 1.00
es2015_block_scoped_fn 64714 ns/iter (± 236) 65171 ns/iter (± 143) 0.99
es2015_block_scoping 137355 ns/iter (± 6956) 146341 ns/iter (± 9246) 0.94
es2015_classes 115287 ns/iter (± 515) 116197 ns/iter (± 542) 0.99
es2015_computed_props 59772 ns/iter (± 122) 60200 ns/iter (± 119) 0.99
es2015_destructuring 113999 ns/iter (± 359) 114945 ns/iter (± 1306) 0.99
es2015_duplicate_keys 62537 ns/iter (± 61) 63450 ns/iter (± 86) 0.99
es2015_parameters 77918 ns/iter (± 202) 78569 ns/iter (± 113) 0.99
es2015_fn_name 65365 ns/iter (± 469) 66221 ns/iter (± 603) 0.99
es2015_for_of 62950 ns/iter (± 71) 63417 ns/iter (± 88) 0.99
es2015_instanceof 61950 ns/iter (± 58) 62190 ns/iter (± 90) 1.00
es2015_shorthand_property 59819 ns/iter (± 77) 60418 ns/iter (± 106) 0.99
es2015_spread 59858 ns/iter (± 84) 60116 ns/iter (± 160) 1.00
es2015_sticky_regex 59852 ns/iter (± 695) 61974 ns/iter (± 123) 0.97
es2015_typeof_symbol 59929 ns/iter (± 88) 61559 ns/iter (± 78) 0.97
es/transform/baseline/base 49697 ns/iter (± 117) 50975 ns/iter (± 93) 0.97
es/transform/baseline/common_reserved_word 60292 ns/iter (± 98) 61702 ns/iter (± 46) 0.98
es/transform/baseline/common_typescript 141233 ns/iter (± 3139) 145827 ns/iter (± 4597) 0.97
es/target/es3 164391 ns/iter (± 105) 168360 ns/iter (± 216) 0.98
es/target/es2015 598561 ns/iter (± 503) 632775 ns/iter (± 1460) 0.95
es/target/es2016 62529 ns/iter (± 45) 64146 ns/iter (± 154) 0.97
es/target/es2017 59428 ns/iter (± 140) 61024 ns/iter (± 109) 0.97
es/target/es2018 78593 ns/iter (± 119) 80915 ns/iter (± 114) 0.97
es/target/es2020 127546 ns/iter (± 162) 130871 ns/iter (± 152) 0.97
babelify-only 669406 ns/iter (± 614) 665932 ns/iter (± 1024) 1.01
parse_and_babelify_angular 42550439 ns/iter (± 696545) 42843094 ns/iter (± 876793) 0.99
parse_and_babelify_backbone 5452056 ns/iter (± 79406) 5544731 ns/iter (± 69491) 0.98
parse_and_babelify_jquery 31776033 ns/iter (± 579495) 33754337 ns/iter (± 468431) 0.94
parse_and_babelify_jquery_mobile 55678555 ns/iter (± 986857) 58708733 ns/iter (± 1073545) 0.95
parse_and_babelify_mootools 33354360 ns/iter (± 499484) 35910700 ns/iter (± 579655) 0.93
parse_and_babelify_underscore 4352357 ns/iter (± 43580) 4452958 ns/iter (± 62616) 0.98
parse_and_babelify_yui 32860112 ns/iter (± 448389) 34918317 ns/iter (± 471959) 0.94
html/minify/document/css_spec 42051354 ns/iter (± 282472) 42955590 ns/iter (± 541963) 0.98
html/minify/document/github 17450089 ns/iter (± 44176) 17567934 ns/iter (± 118183) 0.99
html/minify/document/stackoverflow 15674955 ns/iter (± 77683) 15603598 ns/iter (± 80527) 1.00
html/minify/document_fragment/css_spec 40382348 ns/iter (± 216792) 41855455 ns/iter (± 273474) 0.96
html/minify/document_fragment/github 16721735 ns/iter (± 26060) 16818981 ns/iter (± 62087) 0.99
html/minify/document_fragment/stackoverflow 15151818 ns/iter (± 46354) 15452872 ns/iter (± 110586) 0.98
html/document/visitor/compare/clone 345897 ns/iter (± 1638) 338374 ns/iter (± 1682) 1.02
html/document/visitor/compare/visit_mut_span 369942 ns/iter (± 2910) 365172 ns/iter (± 1187) 1.01
html/document/visitor/compare/visit_mut_span_panic 375657 ns/iter (± 1719) 375534 ns/iter (± 1543) 1.00
html/document/visitor/compare/fold_span 409177 ns/iter (± 1411) 406947 ns/iter (± 1634) 1.01
html/document/visitor/compare/fold_span_panic 466111 ns/iter (± 1633) 458624 ns/iter (± 1630) 1.02
html/document_fragment/visitor/compare/clone 338861 ns/iter (± 2933) 341933 ns/iter (± 1815) 0.99
html/document_fragment/visitor/compare/visit_mut_span 366556 ns/iter (± 1880) 364195 ns/iter (± 1743) 1.01
html/document_fragment/visitor/compare/visit_mut_span_panic 373524 ns/iter (± 2556) 377711 ns/iter (± 1238) 0.99
html/document_fragment/visitor/compare/fold_span 404504 ns/iter (± 1671) 404054 ns/iter (± 1777) 1.00
html/document_fragment/visitor/compare/fold_span_panic 461193 ns/iter (± 2042) 464383 ns/iter (± 1533) 0.99
html/lexer/css_2021_spec 15550596 ns/iter (± 7913) 15669153 ns/iter (± 6533) 0.99
html/lexer/github_com_17_05_2022 6048146 ns/iter (± 4869) 6092094 ns/iter (± 2287) 0.99
html/lexer/stackoverflow_com_17_05_2022 5643404 ns/iter (± 1973) 5678477 ns/iter (± 1611) 0.99
html/parser/parser_document/css_2021_spec 25993460 ns/iter (± 204758) 26522982 ns/iter (± 298679) 0.98
html/parser/parser_document/github_com_17_05_2022 8801247 ns/iter (± 73728) 8855866 ns/iter (± 7744) 0.99
html/parser/parser_document/stackoverflow_com_17_05_2022 7732675 ns/iter (± 8547) 7781802 ns/iter (± 6694) 0.99
html/parser/parser_document_fragment/css_2021_spec 26056368 ns/iter (± 339685) 26370641 ns/iter (± 217722) 0.99
html/parser/parser_document_fragment/github_com_17_05_2022 8809003 ns/iter (± 28645) 8795665 ns/iter (± 11466) 1.00
html/parser/parser_document_fragment/stackoverflow_com_17_05_2022 7759193 ns/iter (± 4421) 7745952 ns/iter (± 3984) 1.00

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

Please sign in to comment.