Skip to content

Commit 5dbbbea

Browse files
authoredMay 18, 2023
fix(es/minifier): Mark all function params as potential property mutation (#7409)
**Description:** This issue is more severe than I originally thought. It raises not in array indexing, but in function calls and property mutation. We should treat all function arguments as potentially be property mutated, otherwise following example ```js class A { a = 1 toString() { return this.a } } const a = new A() function foo(x) { x.a++ } const b = a + 1 foo(a) console.log(b) ``` would be error(It should log 2, but logs 3 after compress). As the result, massive regressions is unavoidable, since some of these optimizations may indeed cause error. Part of them can be mitigated with following optimization -- allow inline of ident even if its original value is mutated. Consider ```js export function foo(x) { const y = x x.a = 1 y.b = 2 } ``` If x is a primitive value, all mutations to its properties are ignored; if x is a object, then y refers to the same object no matter what mutation is performed. And there's still room for more, currently following code ```js export function foo(x) { const y = Math.floor(x); g(y); } ``` But I'd rather do it in a separate PR. **Related issue:** - Closes #7402.
1 parent a2a544a commit 5dbbbea

File tree

87 files changed

+2464
-2332
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

87 files changed

+2464
-2332
lines changed
 
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
function c(r, n) {
2-
let e = new Uint8Array(4 * r * r);
2+
let e = new Uint8Array(4 * r * r), c = (r - n) / 2;
33
return {
44
e,
55
s: Math.sqrt(1.25),
6-
c: (r - n) / 2
6+
c
77
};
88
}

‎crates/swc/tests/tsc-references/inferringClassMembersFromAssignments6.2.minified.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@ function Foonly() {
66
};
77
}
88
Foonly.prototype.mreal = function() {
9-
var self = this;
10-
self.y = 2;
9+
this.y = 2;
1110
};
1211
var foo = new Foonly();
1312
foo.x, foo.y, foo.m();

1 commit comments

Comments
 (1)

github-actions[bot] commented on May 18, 2023

@github-actions[bot]

Benchmark

Benchmark suite Current: 5dbbbea Previous: dba78a0 Ratio
es/full/bugs-1 257674 ns/iter (± 7664) 250780 ns/iter (± 2416) 1.03
es/full/minify/libraries/antd 1266231558 ns/iter (± 17322954) 1186587416 ns/iter (± 6591651) 1.07
es/full/minify/libraries/d3 250740202 ns/iter (± 3279625) 238106401 ns/iter (± 2892611) 1.05
es/full/minify/libraries/echarts 1013967363 ns/iter (± 6882597) 935935043 ns/iter (± 5568815) 1.08
es/full/minify/libraries/jquery 77764633 ns/iter (± 311808) 76138256 ns/iter (± 135935) 1.02
es/full/minify/libraries/lodash 88251649 ns/iter (± 312335) 85857897 ns/iter (± 102939) 1.03
es/full/minify/libraries/moment 45181276 ns/iter (± 220821) 44439532 ns/iter (± 128917) 1.02
es/full/minify/libraries/react 16362531 ns/iter (± 72352) 16201438 ns/iter (± 45997) 1.01
es/full/minify/libraries/terser 203958448 ns/iter (± 1742757) 195197782 ns/iter (± 547638) 1.04
es/full/minify/libraries/three 356163069 ns/iter (± 1397637) 333687914 ns/iter (± 1249854) 1.07
es/full/minify/libraries/typescript 2546082292 ns/iter (± 17576069) 2323670505 ns/iter (± 15308592) 1.10
es/full/minify/libraries/victory 557689635 ns/iter (± 13252207) 490304937 ns/iter (± 2967073) 1.14
es/full/minify/libraries/vue 111454460 ns/iter (± 361771) 105655149 ns/iter (± 385026) 1.05
es/full/codegen/es3 30830 ns/iter (± 81) 29979 ns/iter (± 311) 1.03
es/full/codegen/es5 30778 ns/iter (± 28) 30333 ns/iter (± 238) 1.01
es/full/codegen/es2015 30791 ns/iter (± 53) 30297 ns/iter (± 227) 1.02
es/full/codegen/es2016 30841 ns/iter (± 47) 30366 ns/iter (± 1280) 1.02
es/full/codegen/es2017 30837 ns/iter (± 52) 30354 ns/iter (± 173) 1.02
es/full/codegen/es2018 30847 ns/iter (± 55) 30465 ns/iter (± 303) 1.01
es/full/codegen/es2019 30772 ns/iter (± 31) 30664 ns/iter (± 139) 1.00
es/full/codegen/es2020 30815 ns/iter (± 51) 30095 ns/iter (± 286) 1.02
es/full/all/es3 155922442 ns/iter (± 809464) 154882112 ns/iter (± 1086660) 1.01
es/full/all/es5 149541304 ns/iter (± 999754) 148072879 ns/iter (± 517316) 1.01
es/full/all/es2015 109853283 ns/iter (± 692847) 110324625 ns/iter (± 568788) 1.00
es/full/all/es2016 108487420 ns/iter (± 509376) 109131895 ns/iter (± 684921) 0.99
es/full/all/es2017 108601255 ns/iter (± 506021) 108446109 ns/iter (± 762463) 1.00
es/full/all/es2018 106717214 ns/iter (± 682804) 106928885 ns/iter (± 395971) 1.00
es/full/all/es2019 106150576 ns/iter (± 705550) 105842298 ns/iter (± 580817) 1.00
es/full/all/es2020 101121347 ns/iter (± 442632) 100507575 ns/iter (± 899204) 1.01
es/full/parser 451937 ns/iter (± 5434) 448159 ns/iter (± 7225) 1.01
es/full/base/fixer 17828 ns/iter (± 116) 17604 ns/iter (± 254) 1.01
es/full/base/resolver_and_hygiene 74803 ns/iter (± 209) 72809 ns/iter (± 957) 1.03
serialization of serde 115 ns/iter (± 0) 111 ns/iter (± 1) 1.04
css/minify/libraries/bootstrap 23407964 ns/iter (± 62960) 23043505 ns/iter (± 179547) 1.02
css/visitor/compare/clone 1655630 ns/iter (± 7660) 1625181 ns/iter (± 16797) 1.02
css/visitor/compare/visit_mut_span 1803241 ns/iter (± 5888) 1738679 ns/iter (± 18622) 1.04
css/visitor/compare/visit_mut_span_panic 1864307 ns/iter (± 3125) 1785015 ns/iter (± 23356) 1.04
css/visitor/compare/fold_span 2582450 ns/iter (± 12922) 2443691 ns/iter (± 29818) 1.06
css/visitor/compare/fold_span_panic 2746327 ns/iter (± 12913) 2721990 ns/iter (± 47848) 1.01
css/lexer/bootstrap_5_1_3 4615709 ns/iter (± 4566) 4333245 ns/iter (± 70626) 1.07
css/lexer/foundation_6_7_4 3902842 ns/iter (± 2021) 3644167 ns/iter (± 23098) 1.07
css/lexer/tailwind_3_1_1 749177 ns/iter (± 266) 694204 ns/iter (± 8030) 1.08
css/parser/bootstrap_5_1_3 18103554 ns/iter (± 21624) 17899204 ns/iter (± 208082) 1.01
css/parser/foundation_6_7_4 14461561 ns/iter (± 30099) 14015496 ns/iter (± 152136) 1.03
css/parser/tailwind_3_1_1 2824616 ns/iter (± 5648) 2715648 ns/iter (± 25159) 1.04
es/codegen/colors 730739 ns/iter (± 400259) 720735 ns/iter (± 400186) 1.01
es/codegen/large 2966580 ns/iter (± 1574944) 2978188 ns/iter (± 1582528) 1.00
es/codegen/with-parser/colors 43364 ns/iter (± 478) 43036 ns/iter (± 493) 1.01
es/codegen/with-parser/large 477160 ns/iter (± 874) 457621 ns/iter (± 4430) 1.04
es/minify/libraries/antd 1113966302 ns/iter (± 6138488) 1019645661 ns/iter (± 10090561) 1.09
es/minify/libraries/d3 216890742 ns/iter (± 896499) 209429344 ns/iter (± 1485753) 1.04
es/minify/libraries/echarts 892573497 ns/iter (± 5422988) 812126233 ns/iter (± 6284240) 1.10
es/minify/libraries/jquery 69832194 ns/iter (± 986298) 68370999 ns/iter (± 459371) 1.02
es/minify/libraries/lodash 80058998 ns/iter (± 220803) 78311987 ns/iter (± 225648) 1.02
es/minify/libraries/moment 40390891 ns/iter (± 117549) 39631553 ns/iter (± 250531) 1.02
es/minify/libraries/react 14791940 ns/iter (± 29838) 14718858 ns/iter (± 133506) 1.00
es/minify/libraries/terser 177969826 ns/iter (± 782232) 171365519 ns/iter (± 1022428) 1.04
es/minify/libraries/three 305079363 ns/iter (± 1757013) 285746385 ns/iter (± 1812284) 1.07
es/minify/libraries/typescript 2176181947 ns/iter (± 7917582) 2029194872 ns/iter (± 7339351) 1.07
es/minify/libraries/victory 461679321 ns/iter (± 4176874) 420005071 ns/iter (± 1515336) 1.10
es/minify/libraries/vue 100670436 ns/iter (± 432000) 96719073 ns/iter (± 417029) 1.04
es/visitor/compare/clone 2016809 ns/iter (± 3989) 1961188 ns/iter (± 24360) 1.03
es/visitor/compare/visit_mut_span 2350596 ns/iter (± 2472) 2278363 ns/iter (± 25452) 1.03
es/visitor/compare/visit_mut_span_panic 2409314 ns/iter (± 2830) 2323046 ns/iter (± 33282) 1.04
es/visitor/compare/fold_span 3430909 ns/iter (± 4937) 3304067 ns/iter (± 31946) 1.04
es/visitor/compare/fold_span_panic 3565743 ns/iter (± 3340) 3540111 ns/iter (± 20806) 1.01
es/lexer/colors 11501 ns/iter (± 6) 11500 ns/iter (± 56) 1.00
es/lexer/angular 5689798 ns/iter (± 13076) 5599450 ns/iter (± 64804) 1.02
es/lexer/backbone 731166 ns/iter (± 3227) 711363 ns/iter (± 11194) 1.03
es/lexer/jquery 4092041 ns/iter (± 4310) 3977385 ns/iter (± 52529) 1.03
es/lexer/jquery mobile 6282331 ns/iter (± 3795) 6066474 ns/iter (± 48828) 1.04
es/lexer/mootools 3244644 ns/iter (± 907) 3152292 ns/iter (± 16661) 1.03
es/lexer/underscore 603279 ns/iter (± 364) 581379 ns/iter (± 4405) 1.04
es/lexer/three 19259424 ns/iter (± 24213) 19133024 ns/iter (± 286402) 1.01
es/lexer/yui 3514391 ns/iter (± 26595) 3426125 ns/iter (± 33493) 1.03
es/parser/colors 25624 ns/iter (± 57) 25079 ns/iter (± 320) 1.02
es/parser/angular 13173078 ns/iter (± 68775) 12652332 ns/iter (± 201870) 1.04
es/parser/backbone 1943729 ns/iter (± 6275) 1886019 ns/iter (± 30961) 1.03
es/parser/jquery 10667730 ns/iter (± 216945) 10514005 ns/iter (± 42292) 1.01
es/parser/jquery mobile 16276529 ns/iter (± 80169) 16142335 ns/iter (± 28845) 1.01
es/parser/mootools 8104265 ns/iter (± 146433) 8038070 ns/iter (± 26346) 1.01
es/parser/underscore 1659190 ns/iter (± 10852) 1647044 ns/iter (± 28704) 1.01
es/parser/three 46954920 ns/iter (± 245407) 43240229 ns/iter (± 672564) 1.09
es/parser/yui 8094190 ns/iter (± 43765) 7781733 ns/iter (± 114693) 1.04
es/preset-env/usage/builtin_type 146733 ns/iter (± 40123) 147076 ns/iter (± 39774) 1.00
es/preset-env/usage/property 15091 ns/iter (± 49) 14968 ns/iter (± 235) 1.01
es/resolver/typescript 91541535 ns/iter (± 957182) 88805964 ns/iter (± 1332868) 1.03
es/fixer/typescript 67354908 ns/iter (± 312109) 61987034 ns/iter (± 1084878) 1.09
es/hygiene/typescript 137438837 ns/iter (± 1494119) 127700864 ns/iter (± 944972) 1.08
es/resolver_with_hygiene/typescript 240070803 ns/iter (± 1642770) 228874438 ns/iter (± 1628279) 1.05
es/visitor/base-perf/module_clone 59133 ns/iter (± 461) 59296 ns/iter (± 473) 1.00
es/visitor/base-perf/fold_empty 63100 ns/iter (± 350) 63202 ns/iter (± 562) 1.00
es/visitor/base-perf/fold_noop_impl_all 63028 ns/iter (± 326) 62971 ns/iter (± 598) 1.00
es/visitor/base-perf/fold_noop_impl_vec 63354 ns/iter (± 353) 63530 ns/iter (± 280) 1.00
es/visitor/base-perf/boxing_boxed_clone 69 ns/iter (± 9) 52 ns/iter (± 0) 1.33
es/visitor/base-perf/boxing_unboxed_clone 61 ns/iter (± 0) 37 ns/iter (± 0) 1.65
es/visitor/base-perf/boxing_boxed 117 ns/iter (± 2) 108 ns/iter (± 0) 1.08
es/visitor/base-perf/boxing_unboxed 78 ns/iter (± 0) 76 ns/iter (± 0) 1.03
es/visitor/base-perf/visit_empty 0 ns/iter (± 0) 0 ns/iter (± 0) NaN
es/visitor/base-perf/visit_contains_this 2635 ns/iter (± 36) 2634 ns/iter (± 9) 1.00
es/base/parallel/resolver/typescript 3900500330 ns/iter (± 281054074) 4033823585 ns/iter (± 310187349) 0.97
es/base/parallel/hygiene/typescript 1462849993 ns/iter (± 17650767) 1424769325 ns/iter (± 30166522) 1.03
misc/visitors/time-complexity/time 5 101 ns/iter (± 0) 101 ns/iter (± 0) 1
misc/visitors/time-complexity/time 10 386 ns/iter (± 3) 295 ns/iter (± 0) 1.31
misc/visitors/time-complexity/time 15 717 ns/iter (± 1) 718 ns/iter (± 2) 1.00
misc/visitors/time-complexity/time 20 1094 ns/iter (± 5) 1049 ns/iter (± 52) 1.04
misc/visitors/time-complexity/time 40 3740 ns/iter (± 8) 3756 ns/iter (± 11) 1.00
misc/visitors/time-complexity/time 60 7742 ns/iter (± 9) 8684 ns/iter (± 28) 0.89
es/full-target/es2016 223877 ns/iter (± 1121) 226668 ns/iter (± 686) 0.99
es/full-target/es2017 213539 ns/iter (± 574) 217348 ns/iter (± 794) 0.98
es/full-target/es2018 202499 ns/iter (± 749) 205154 ns/iter (± 624) 0.99
es2020_nullish_coalescing 69209 ns/iter (± 422) 68208 ns/iter (± 413) 1.01
es2020_optional_chaining 94649 ns/iter (± 242) 94762 ns/iter (± 672) 1.00
es2022_class_properties 118607 ns/iter (± 323) 116726 ns/iter (± 300) 1.02
es2018_object_rest_spread 74109 ns/iter (± 256) 71568 ns/iter (± 364) 1.04
es2019_optional_catch_binding 63332 ns/iter (± 141) 61476 ns/iter (± 351) 1.03
es2017_async_to_generator 63463 ns/iter (± 186) 62685 ns/iter (± 213) 1.01
es2016_exponentiation 67947 ns/iter (± 240) 66460 ns/iter (± 199) 1.02
es2015_arrow 70798 ns/iter (± 171) 67545 ns/iter (± 186) 1.05
es2015_block_scoped_fn 67556 ns/iter (± 320) 66652 ns/iter (± 201) 1.01
es2015_block_scoping 119113 ns/iter (± 243) 118028 ns/iter (± 374) 1.01

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

Please sign in to comment.