Skip to content

Commit

Permalink
fix(es/minifier): Don't inline invalid LHS into an update argument (#…
Browse files Browse the repository at this point in the history
…6680)

**Related issue:**

 - Closes #6641.
  • Loading branch information
kdy1 committed Dec 20, 2022
1 parent 2d729fc commit 7e6ec8d
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 0 deletions.
5 changes: 5 additions & 0 deletions crates/swc_ecma_minifier/src/compress/optimize/inline.rs
Expand Up @@ -733,6 +733,11 @@ where
})
.cloned()
{
if !matches!(&*value, Expr::Ident(..) | Expr::Member(..)) && self.ctx.is_update_arg
{
return;
}

self.changed = true;
report_change!("inline: Replacing a variable `{}` with cheap expression", i);

Expand Down
6 changes: 6 additions & 0 deletions crates/swc_ecma_minifier/src/compress/optimize/mod.rs
Expand Up @@ -1536,6 +1536,7 @@ where
},
is_lhs_of_assign: false,
is_exact_lhs_of_assign: false,
is_update_arg: false,
..self.ctx
};
e.callee.visit_mut_with(&mut *self.with_ctx(ctx));
Expand Down Expand Up @@ -1566,6 +1567,7 @@ where
is_this_aware_callee: false,
is_lhs_of_assign: false,
is_exact_lhs_of_assign: false,
is_update_arg: false,
..self.ctx
};
// TODO: Prevent inline if callee is unknown.
Expand All @@ -1583,6 +1585,7 @@ where
{
let ctx = Ctx {
dont_invoke_iife: true,
is_update_arg: false,
..self.ctx
};
n.super_class.visit_mut_with(&mut *self.with_ctx(ctx));
Expand All @@ -1591,6 +1594,7 @@ where
{
let ctx = Ctx {
in_strict: true,
is_update_arg: false,
..self.ctx
};
n.body.visit_mut_with(&mut *self.with_ctx(ctx));
Expand Down Expand Up @@ -2184,6 +2188,7 @@ where
let ctx = Ctx {
in_obj_of_non_computed_member: !n.prop.is_computed(),
is_exact_lhs_of_assign: false,
is_update_arg: false,
..self.ctx
};
n.obj.visit_mut_with(&mut *self.with_ctx(ctx));
Expand All @@ -2192,6 +2197,7 @@ where
let ctx = Ctx {
is_exact_lhs_of_assign: false,
is_lhs_of_assign: false,
is_update_arg: false,
..self.ctx
};
c.visit_mut_with(&mut *self.with_ctx(ctx));
Expand Down
13 changes: 13 additions & 0 deletions crates/swc_ecma_minifier/tests/exec.rs
Expand Up @@ -10394,3 +10394,16 @@ fn issue_6528() {
"###,
)
}

#[test]
fn issue_6641() {
run_default_exec_test(
r###"
const iota = (i => () => 1 << ++i)(-1);
const a = iota(), b = iota();
console.log(a, b);
"###,
)
}

1 comment on commit 7e6ec8d

@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: 7e6ec8d Previous: e7849db Ratio
es/full/bugs-1 306880 ns/iter (± 11962) 302705 ns/iter (± 8760) 1.01
es/full/minify/libraries/antd 1736122745 ns/iter (± 23055196) 1649727840 ns/iter (± 31294844) 1.05
es/full/minify/libraries/d3 320277659 ns/iter (± 5863860) 315661244 ns/iter (± 8343244) 1.01
es/full/minify/libraries/echarts 1313703528 ns/iter (± 14379375) 1288049445 ns/iter (± 12539531) 1.02
es/full/minify/libraries/jquery 91242207 ns/iter (± 850580) 93000778 ns/iter (± 1348437) 0.98
es/full/minify/libraries/lodash 106799641 ns/iter (± 697612) 108196627 ns/iter (± 630043) 0.99
es/full/minify/libraries/moment 53161051 ns/iter (± 475067) 53830188 ns/iter (± 1131638) 0.99
es/full/minify/libraries/react 19050442 ns/iter (± 104579) 19438033 ns/iter (± 172912) 0.98
es/full/minify/libraries/terser 253151253 ns/iter (± 4460853) 260034986 ns/iter (± 4676892) 0.97
es/full/minify/libraries/three 455556129 ns/iter (± 9263250) 473624942 ns/iter (± 7742045) 0.96
es/full/minify/libraries/typescript 3251258446 ns/iter (± 15062196) 3089609309 ns/iter (± 41817715) 1.05
es/full/minify/libraries/victory 750750352 ns/iter (± 13751515) 711411167 ns/iter (± 11763421) 1.06
es/full/minify/libraries/vue 131995150 ns/iter (± 996690) 137139799 ns/iter (± 1343886) 0.96
es/full/codegen/es3 27032 ns/iter (± 110) 27244 ns/iter (± 47) 0.99
es/full/codegen/es5 27091 ns/iter (± 44) 27295 ns/iter (± 46) 0.99
es/full/codegen/es2015 27074 ns/iter (± 50) 27331 ns/iter (± 58) 0.99
es/full/codegen/es2016 27061 ns/iter (± 36) 27295 ns/iter (± 40) 0.99
es/full/codegen/es2017 27061 ns/iter (± 41) 27279 ns/iter (± 51) 0.99
es/full/codegen/es2018 27040 ns/iter (± 48) 27302 ns/iter (± 86) 0.99
es/full/codegen/es2019 27027 ns/iter (± 69) 27322 ns/iter (± 92) 0.99
es/full/codegen/es2020 27061 ns/iter (± 66) 27321 ns/iter (± 60) 0.99
es/full/all/es3 167249370 ns/iter (± 1395295) 168614653 ns/iter (± 2760164) 0.99
es/full/all/es5 159239338 ns/iter (± 3351203) 161132814 ns/iter (± 2410018) 0.99
es/full/all/es2015 118837532 ns/iter (± 911566) 119421947 ns/iter (± 1313776) 1.00
es/full/all/es2016 118099251 ns/iter (± 570402) 117909838 ns/iter (± 608492) 1.00
es/full/all/es2017 117552996 ns/iter (± 299977) 117710372 ns/iter (± 678411) 1.00
es/full/all/es2018 116396033 ns/iter (± 962585) 115549493 ns/iter (± 564919) 1.01
es/full/all/es2019 115200734 ns/iter (± 671037) 115728354 ns/iter (± 610919) 1.00
es/full/all/es2020 110448849 ns/iter (± 1013588) 111030919 ns/iter (± 772516) 0.99
es/full/parser 519937 ns/iter (± 8905) 508439 ns/iter (± 5295) 1.02
es/full/base/fixer 21881 ns/iter (± 42) 21951 ns/iter (± 25) 1.00
es/full/base/resolver_and_hygiene 77651 ns/iter (± 36) 78179 ns/iter (± 117) 0.99
serialization of ast node 118 ns/iter (± 0) 118 ns/iter (± 0) 1
serialization of serde 124 ns/iter (± 0) 124 ns/iter (± 0) 1
css/minify/libraries/bootstrap 26928944 ns/iter (± 136213) 27155662 ns/iter (± 138466) 0.99
css/visitor/compare/clone 2081628 ns/iter (± 6845) 2063905 ns/iter (± 13724) 1.01
css/visitor/compare/visit_mut_span 2279352 ns/iter (± 9005) 2275060 ns/iter (± 11497) 1.00
css/visitor/compare/visit_mut_span_panic 2308912 ns/iter (± 4610) 2341778 ns/iter (± 14607) 0.99
css/visitor/compare/fold_span 2984699 ns/iter (± 27242) 2975880 ns/iter (± 13722) 1.00
css/visitor/compare/fold_span_panic 3117846 ns/iter (± 24334) 3109517 ns/iter (± 26412) 1.00
css/lexer/bootstrap_5_1_3 5176268 ns/iter (± 5200) 5178401 ns/iter (± 1376) 1.00
css/lexer/foundation_6_7_4 4360558 ns/iter (± 1878) 4354476 ns/iter (± 1762) 1.00
css/lexer/tailwind_3_1_1 826069 ns/iter (± 512) 825557 ns/iter (± 408) 1.00
css/parser/bootstrap_5_1_3 20725430 ns/iter (± 102949) 20887952 ns/iter (± 169130) 0.99
css/parser/foundation_6_7_4 16504813 ns/iter (± 20909) 16611366 ns/iter (± 40218) 0.99
css/parser/tailwind_3_1_1 3186409 ns/iter (± 5001) 3199590 ns/iter (± 5148) 1.00
es/codegen/colors 322813 ns/iter (± 181848) 332300 ns/iter (± 186984) 0.97
es/codegen/large 1224204 ns/iter (± 631237) 1219818 ns/iter (± 641938) 1.00
es/codegen/with-parser/colors 46082 ns/iter (± 415) 46309 ns/iter (± 410) 1.00
es/codegen/with-parser/large 515159 ns/iter (± 1543) 516568 ns/iter (± 1646) 1.00
es/minify/libraries/antd 1512478031 ns/iter (± 14657650) 1438763219 ns/iter (± 14950230) 1.05
es/minify/libraries/d3 261862349 ns/iter (± 4240974) 263252369 ns/iter (± 4604241) 0.99
es/minify/libraries/echarts 1129535531 ns/iter (± 15777284) 1102816968 ns/iter (± 11177039) 1.02
es/minify/libraries/jquery 79159986 ns/iter (± 581416) 78852758 ns/iter (± 637708) 1.00
es/minify/libraries/lodash 95047273 ns/iter (± 954216) 96232476 ns/iter (± 782753) 0.99
es/minify/libraries/moment 45854454 ns/iter (± 314180) 46294829 ns/iter (± 277602) 0.99
es/minify/libraries/react 17020353 ns/iter (± 90805) 17119205 ns/iter (± 197837) 0.99
es/minify/libraries/terser 214781454 ns/iter (± 2932196) 218245765 ns/iter (± 2239194) 0.98
es/minify/libraries/three 378082590 ns/iter (± 7406074) 384031744 ns/iter (± 4881264) 0.98
es/minify/libraries/typescript 2795995484 ns/iter (± 17930626) 2611460016 ns/iter (± 7707359) 1.07
es/minify/libraries/victory 619274024 ns/iter (± 20721219) 585122115 ns/iter (± 11592603) 1.06
es/minify/libraries/vue 116932355 ns/iter (± 783123) 117075190 ns/iter (± 941999) 1.00
es/visitor/compare/clone 2426551 ns/iter (± 13648) 2437323 ns/iter (± 4277) 1.00
es/visitor/compare/visit_mut_span 2818497 ns/iter (± 5236) 2832452 ns/iter (± 10011) 1.00
es/visitor/compare/visit_mut_span_panic 2849323 ns/iter (± 21509) 2863740 ns/iter (± 9930) 0.99
es/visitor/compare/fold_span 3994194 ns/iter (± 9751) 3985282 ns/iter (± 11452) 1.00
es/visitor/compare/fold_span_panic 4143200 ns/iter (± 23230) 4117684 ns/iter (± 101523) 1.01
es/lexer/colors 17237 ns/iter (± 7) 17281 ns/iter (± 15) 1.00
es/lexer/angular 8173117 ns/iter (± 6867) 8202609 ns/iter (± 4282) 1.00
es/lexer/backbone 1066864 ns/iter (± 567) 1067023 ns/iter (± 541) 1.00
es/lexer/jquery 5919345 ns/iter (± 1409) 5933880 ns/iter (± 10441) 1.00
es/lexer/jquery mobile 9099157 ns/iter (± 5683) 9125241 ns/iter (± 8724) 1.00
es/lexer/mootools 4638427 ns/iter (± 1439) 4644861 ns/iter (± 5423) 1.00
es/lexer/underscore 890938 ns/iter (± 239) 892215 ns/iter (± 244) 1.00
es/lexer/three 27659109 ns/iter (± 21675) 27717684 ns/iter (± 29914) 1.00
es/lexer/yui 5013355 ns/iter (± 2442) 5030544 ns/iter (± 6095) 1.00
es/parser/colors 30919 ns/iter (± 122) 30870 ns/iter (± 163) 1.00
es/parser/angular 15780768 ns/iter (± 222443) 15757222 ns/iter (± 102091) 1.00
es/parser/backbone 2323238 ns/iter (± 11166) 2321964 ns/iter (± 11316) 1.00
es/parser/jquery 12586492 ns/iter (± 96462) 12856616 ns/iter (± 148223) 0.98
es/parser/jquery mobile 19946941 ns/iter (± 450407) 20249257 ns/iter (± 147747) 0.99
es/parser/mootools 9631761 ns/iter (± 41050) 9630661 ns/iter (± 33086) 1.00
es/parser/underscore 1965783 ns/iter (± 10859) 1956932 ns/iter (± 10061) 1.00
es/parser/three 60391384 ns/iter (± 582911) 59383369 ns/iter (± 367406) 1.02
es/parser/yui 9603783 ns/iter (± 128671) 9633027 ns/iter (± 82288) 1.00
es/preset-env/usage/builtin_type 144792 ns/iter (± 34151) 144565 ns/iter (± 33525) 1.00
es/preset-env/usage/property 21443 ns/iter (± 73) 21546 ns/iter (± 63) 1.00
es/resolver/typescript 122782482 ns/iter (± 2850305) 111616741 ns/iter (± 2179322) 1.10
es/fixer/typescript 97588538 ns/iter (± 1721106) 85488810 ns/iter (± 1004023) 1.14
es/hygiene/typescript 196616731 ns/iter (± 982556) 170393305 ns/iter (± 2234552) 1.15
es/resolver_with_hygiene/typescript 328600094 ns/iter (± 2114614) 296793516 ns/iter (± 1430703) 1.11
es/visitor/base-perf/module_clone 77152 ns/iter (± 1784) 75372 ns/iter (± 1219) 1.02
es/visitor/base-perf/fold_empty 85928 ns/iter (± 1783) 85408 ns/iter (± 929) 1.01
es/visitor/base-perf/fold_noop_impl_all 85830 ns/iter (± 1139) 84933 ns/iter (± 2061) 1.01
es/visitor/base-perf/fold_noop_impl_vec 86539 ns/iter (± 2154) 86000 ns/iter (± 1769) 1.01
es/visitor/base-perf/boxing_boxed_clone 58 ns/iter (± 0) 56 ns/iter (± 0) 1.04
es/visitor/base-perf/boxing_unboxed_clone 59 ns/iter (± 0) 59 ns/iter (± 0) 1
es/visitor/base-perf/boxing_boxed 105 ns/iter (± 0) 103 ns/iter (± 0) 1.02
es/visitor/base-perf/boxing_unboxed 102 ns/iter (± 0) 102 ns/iter (± 0) 1
es/visitor/base-perf/visit_contains_this 3542 ns/iter (± 66) 3502 ns/iter (± 93) 1.01
es/base/parallel/resolver/typescript 5976636415 ns/iter (± 537032501) 5703572693 ns/iter (± 268569284) 1.05
es/base/parallel/hygiene/typescript 2258958129 ns/iter (± 28953954) 2022077382 ns/iter (± 36037951) 1.12
misc/visitors/time-complexity/time 5 102 ns/iter (± 0) 102 ns/iter (± 0) 1
misc/visitors/time-complexity/time 10 325 ns/iter (± 2) 320 ns/iter (± 3) 1.02
misc/visitors/time-complexity/time 15 659 ns/iter (± 12) 647 ns/iter (± 0) 1.02
misc/visitors/time-complexity/time 20 1241 ns/iter (± 12) 1232 ns/iter (± 4) 1.01
misc/visitors/time-complexity/time 40 6696 ns/iter (± 40) 6625 ns/iter (± 11) 1.01
misc/visitors/time-complexity/time 60 17082 ns/iter (± 27) 17133 ns/iter (± 6) 1.00
es/full-target/es2016 189005 ns/iter (± 512) 189362 ns/iter (± 953) 1.00
es/full-target/es2017 183092 ns/iter (± 628) 183617 ns/iter (± 288) 1.00
es/full-target/es2018 173274 ns/iter (± 230) 173523 ns/iter (± 398) 1.00
es2020_nullish_coalescing 67206 ns/iter (± 161) 66968 ns/iter (± 559) 1.00
es2020_optional_chaining 96888 ns/iter (± 5773) 96944 ns/iter (± 247) 1.00
es2022_class_properties 94748 ns/iter (± 134) 94263 ns/iter (± 162) 1.01
es2018_object_rest_spread 71735 ns/iter (± 81) 71400 ns/iter (± 122) 1.00
es2019_optional_catch_binding 61687 ns/iter (± 153) 61486 ns/iter (± 114) 1.00
es2017_async_to_generator 61806 ns/iter (± 119) 61692 ns/iter (± 68) 1.00
es2016_exponentiation 65584 ns/iter (± 139) 65287 ns/iter (± 95) 1.00
es2015_arrow 70690 ns/iter (± 305) 70056 ns/iter (± 216) 1.01
es2015_block_scoped_fn 66275 ns/iter (± 79) 66186 ns/iter (± 109) 1.00
es2015_block_scoping 139164 ns/iter (± 5211) 146649 ns/iter (± 12066) 0.95
es2015_classes 116252 ns/iter (± 375) 116630 ns/iter (± 466) 1.00
es2015_computed_props 61514 ns/iter (± 106) 61044 ns/iter (± 63) 1.01
es2015_destructuring 116025 ns/iter (± 418) 115855 ns/iter (± 172) 1.00
es2015_duplicate_keys 64529 ns/iter (± 74) 63979 ns/iter (± 140) 1.01
es2015_parameters 79865 ns/iter (± 167) 79544 ns/iter (± 146) 1.00
es2015_fn_name 66744 ns/iter (± 412) 66667 ns/iter (± 469) 1.00
es2015_for_of 64326 ns/iter (± 72) 64573 ns/iter (± 128) 1.00
es2015_instanceof 63366 ns/iter (± 103) 63167 ns/iter (± 96) 1.00
es2015_shorthand_property 61352 ns/iter (± 97) 61249 ns/iter (± 97) 1.00
es2015_spread 61374 ns/iter (± 57) 61394 ns/iter (± 121) 1.00
es2015_sticky_regex 62503 ns/iter (± 73) 62301 ns/iter (± 98) 1.00
es2015_typeof_symbol 62541 ns/iter (± 109) 62346 ns/iter (± 168) 1.00
es/transform/baseline/base 52166 ns/iter (± 98) 51932 ns/iter (± 89) 1.00
es/transform/baseline/common_reserved_word 62874 ns/iter (± 104) 62583 ns/iter (± 79) 1.00
es/transform/baseline/common_typescript 142729 ns/iter (± 226) 141797 ns/iter (± 274) 1.01
es/target/es3 169892 ns/iter (± 320) 169538 ns/iter (± 253) 1.00
es/target/es2015 630585 ns/iter (± 1393) 628846 ns/iter (± 1182) 1.00
es/target/es2016 65549 ns/iter (± 135) 65324 ns/iter (± 72) 1.00
es/target/es2017 61954 ns/iter (± 100) 61741 ns/iter (± 115) 1.00
es/target/es2018 81723 ns/iter (± 185) 81471 ns/iter (± 140) 1.00
es/target/es2020 133852 ns/iter (± 246) 134208 ns/iter (± 240) 1.00
babelify-only 668647 ns/iter (± 985) 672333 ns/iter (± 1212) 0.99
parse_and_babelify_angular 42938332 ns/iter (± 520564) 43688921 ns/iter (± 778948) 0.98
parse_and_babelify_backbone 5338520 ns/iter (± 38274) 5377474 ns/iter (± 130830) 0.99
parse_and_babelify_jquery 33438636 ns/iter (± 393694) 31511611 ns/iter (± 672000) 1.06
parse_and_babelify_jquery_mobile 56860692 ns/iter (± 947843) 52929718 ns/iter (± 512155) 1.07
parse_and_babelify_mootools 34641760 ns/iter (± 468472) 32927645 ns/iter (± 735913) 1.05
parse_and_babelify_underscore 4315145 ns/iter (± 30223) 4321057 ns/iter (± 18283) 1.00
parse_and_babelify_yui 33497782 ns/iter (± 563155) 31657658 ns/iter (± 496008) 1.06
html/minify/document/css_spec 42664891 ns/iter (± 517786) 41830444 ns/iter (± 273166) 1.02
html/minify/document/github 17382943 ns/iter (± 42946) 17269994 ns/iter (± 18056) 1.01
html/minify/document/stackoverflow 15515253 ns/iter (± 38772) 15437916 ns/iter (± 22578) 1.01
html/minify/document_fragment/css_spec 40387587 ns/iter (± 303003) 39842225 ns/iter (± 200073) 1.01
html/minify/document_fragment/github 16685854 ns/iter (± 75190) 16592510 ns/iter (± 27980) 1.01
html/minify/document_fragment/stackoverflow 15173290 ns/iter (± 79434) 15032440 ns/iter (± 37564) 1.01
html/document/visitor/compare/clone 340403 ns/iter (± 2755) 341038 ns/iter (± 2309) 1.00
html/document/visitor/compare/visit_mut_span 365919 ns/iter (± 1702) 367379 ns/iter (± 2171) 1.00
html/document/visitor/compare/visit_mut_span_panic 376268 ns/iter (± 1440) 375924 ns/iter (± 2146) 1.00
html/document/visitor/compare/fold_span 404620 ns/iter (± 2259) 406099 ns/iter (± 2729) 1.00
html/document/visitor/compare/fold_span_panic 461273 ns/iter (± 2510) 465090 ns/iter (± 2576) 0.99
html/document_fragment/visitor/compare/clone 337294 ns/iter (± 1480) 337903 ns/iter (± 2256) 1.00
html/document_fragment/visitor/compare/visit_mut_span 367157 ns/iter (± 2352) 373541 ns/iter (± 2396) 0.98
html/document_fragment/visitor/compare/visit_mut_span_panic 373919 ns/iter (± 2748) 372212 ns/iter (± 1241) 1.00
html/document_fragment/visitor/compare/fold_span 403060 ns/iter (± 1629) 410380 ns/iter (± 2001) 0.98
html/document_fragment/visitor/compare/fold_span_panic 462868 ns/iter (± 3212) 459483 ns/iter (± 2021) 1.01
html/lexer/css_2021_spec 15590931 ns/iter (± 92973) 15617746 ns/iter (± 5396) 1.00
html/lexer/github_com_17_05_2022 6051707 ns/iter (± 5724) 6060831 ns/iter (± 5492) 1.00
html/lexer/stackoverflow_com_17_05_2022 5663729 ns/iter (± 1995) 5672434 ns/iter (± 6806) 1.00
html/parser/parser_document/css_2021_spec 25781087 ns/iter (± 75219) 25863365 ns/iter (± 319589) 1.00
html/parser/parser_document/github_com_17_05_2022 8780538 ns/iter (± 7586) 8807354 ns/iter (± 14690) 1.00
html/parser/parser_document/stackoverflow_com_17_05_2022 7751769 ns/iter (± 8337) 7783209 ns/iter (± 7236) 1.00
html/parser/parser_document_fragment/css_2021_spec 28111304 ns/iter (± 210206) 26480308 ns/iter (± 227229) 1.06
html/parser/parser_document_fragment/github_com_17_05_2022 9226917 ns/iter (± 10432) 8837150 ns/iter (± 6236) 1.04
html/parser/parser_document_fragment/stackoverflow_com_17_05_2022 8455241 ns/iter (± 4562) 7806226 ns/iter (± 6271) 1.08

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

Please sign in to comment.