|
| 1 | +use rustc_hash::FxHashSet; |
1 | 2 | use swc_atoms::{js_word, JsWord};
|
2 | 3 | use swc_common::{util::take::Take, DUMMY_SP};
|
3 | 4 | use swc_ecma_ast::*;
|
4 | 5 | use swc_ecma_usage_analyzer::util::is_global_var_with_pure_property_access;
|
5 | 6 | use swc_ecma_utils::{contains_ident_ref, ExprExt};
|
| 7 | +use swc_ecma_visit::{noop_visit_type, Visit, VisitWith}; |
6 | 8 |
|
7 | 9 | use super::Optimizer;
|
8 | 10 | #[cfg(feature = "debug")]
|
@@ -785,11 +787,17 @@ impl Optimizer<'_> {
|
785 | 787 | return None;
|
786 | 788 | }
|
787 | 789 |
|
| 790 | + let properties_used_via_this = { |
| 791 | + let mut v = ThisPropertyVisitor::default(); |
| 792 | + obj.visit_with(&mut v); |
| 793 | + v.properties |
| 794 | + }; |
| 795 | + |
788 | 796 | let should_preserve_property = |sym: &JsWord| {
|
789 | 797 | if let "toString" = &**sym {
|
790 | 798 | return true;
|
791 | 799 | }
|
792 |
| - !usage.accessed_props.contains_key(sym) |
| 800 | + !usage.accessed_props.contains_key(sym) && !properties_used_via_this.contains(sym) |
793 | 801 | };
|
794 | 802 | let should_preserve = |key: &PropName| match key {
|
795 | 803 | PropName::Ident(k) => should_preserve_property(&k.sym),
|
@@ -824,3 +832,34 @@ impl Optimizer<'_> {
|
824 | 832 | None
|
825 | 833 | }
|
826 | 834 | }
|
| 835 | + |
| 836 | +#[derive(Default)] |
| 837 | +struct ThisPropertyVisitor { |
| 838 | + properties: FxHashSet<JsWord>, |
| 839 | + |
| 840 | + should_abort: bool, |
| 841 | +} |
| 842 | + |
| 843 | +impl Visit for ThisPropertyVisitor { |
| 844 | + noop_visit_type!(); |
| 845 | + |
| 846 | + fn visit_member_expr(&mut self, e: &MemberExpr) { |
| 847 | + if self.should_abort { |
| 848 | + return; |
| 849 | + } |
| 850 | + |
| 851 | + e.visit_children_with(self); |
| 852 | + |
| 853 | + if let Expr::This(..) = &*e.obj { |
| 854 | + match &e.prop { |
| 855 | + MemberProp::Ident(p) => { |
| 856 | + self.properties.insert(p.sym.clone()); |
| 857 | + } |
| 858 | + MemberProp::Computed(_) => { |
| 859 | + self.should_abort = true; |
| 860 | + } |
| 861 | + _ => {} |
| 862 | + } |
| 863 | + } |
| 864 | + } |
| 865 | +} |
1 commit comments
github-actions[bot] commentedon Aug 10, 2023
Benchmark
es/full/bugs-1
291272
ns/iter (± 4464
)294983
ns/iter (± 10736
)0.99
es/full/minify/libraries/antd
1314983115
ns/iter (± 8464378
)1393451284
ns/iter (± 12355364
)0.94
es/full/minify/libraries/d3
280107813
ns/iter (± 2503141
)294944366
ns/iter (± 7342342
)0.95
es/full/minify/libraries/echarts
1052310968
ns/iter (± 13384943
)1106663308
ns/iter (± 24141764
)0.95
es/full/minify/libraries/jquery
85123447
ns/iter (± 119507
)85503274
ns/iter (± 716073
)1.00
es/full/minify/libraries/lodash
98535771
ns/iter (± 231091
)100659215
ns/iter (± 918345
)0.98
es/full/minify/libraries/moment
50104968
ns/iter (± 55255
)50414762
ns/iter (± 537849
)0.99
es/full/minify/libraries/react
18055265
ns/iter (± 33558
)18172136
ns/iter (± 122945
)0.99
es/full/minify/libraries/terser
219747790
ns/iter (± 606503
)229593321
ns/iter (± 5006638
)0.96
es/full/minify/libraries/three
385373353
ns/iter (± 1823612
)408699446
ns/iter (± 9219747
)0.94
es/full/minify/libraries/typescript
2672584838
ns/iter (± 6067121
)2747289997
ns/iter (± 21911913
)0.97
es/full/minify/libraries/victory
566346710
ns/iter (± 3034159
)590590452
ns/iter (± 13457291
)0.96
es/full/minify/libraries/vue
120010701
ns/iter (± 268621
)123570004
ns/iter (± 779407
)0.97
es/full/codegen/es3
33508
ns/iter (± 101
)34070
ns/iter (± 59
)0.98
es/full/codegen/es5
33437
ns/iter (± 133
)34039
ns/iter (± 51
)0.98
es/full/codegen/es2015
33583
ns/iter (± 80
)33970
ns/iter (± 108
)0.99
es/full/codegen/es2016
33639
ns/iter (± 86
)33982
ns/iter (± 75
)0.99
es/full/codegen/es2017
33480
ns/iter (± 174
)34028
ns/iter (± 88
)0.98
es/full/codegen/es2018
33579
ns/iter (± 115
)34018
ns/iter (± 106
)0.99
es/full/codegen/es2019
33557
ns/iter (± 114
)34051
ns/iter (± 80
)0.99
es/full/codegen/es2020
33657
ns/iter (± 105
)34087
ns/iter (± 77
)0.99
es/full/all/es3
173524514
ns/iter (± 667633
)171898682
ns/iter (± 607742
)1.01
es/full/all/es5
165788081
ns/iter (± 1321109
)164384543
ns/iter (± 1577156
)1.01
es/full/all/es2015
125089653
ns/iter (± 657250
)123491325
ns/iter (± 447676
)1.01
es/full/all/es2016
124719635
ns/iter (± 784361
)122848446
ns/iter (± 1287123
)1.02
es/full/all/es2017
123607291
ns/iter (± 1283621
)122586959
ns/iter (± 728454
)1.01
es/full/all/es2018
121186685
ns/iter (± 914225
)120143891
ns/iter (± 651318
)1.01
es/full/all/es2019
121073662
ns/iter (± 732299
)119627782
ns/iter (± 1547531
)1.01
es/full/all/es2020
116064653
ns/iter (± 840430
)115429026
ns/iter (± 451329
)1.01
es/full/parser
541613
ns/iter (± 6299
)536594
ns/iter (± 5615
)1.01
es/full/base/fixer
17624
ns/iter (± 53
)18715
ns/iter (± 1036
)0.94
es/full/base/resolver_and_hygiene
78980
ns/iter (± 266
)80956
ns/iter (± 357
)0.98
serialization of serde
290
ns/iter (± 0
)293
ns/iter (± 4
)0.99
css/minify/libraries/bootstrap
28778903
ns/iter (± 83995
)29355574
ns/iter (± 77669
)0.98
css/visitor/compare/clone
1638327
ns/iter (± 3168
)1635441
ns/iter (± 2344
)1.00
css/visitor/compare/visit_mut_span
1764912
ns/iter (± 2148
)1758759
ns/iter (± 1752
)1.00
css/visitor/compare/visit_mut_span_panic
1838390
ns/iter (± 3045
)1850422
ns/iter (± 5631
)0.99
css/visitor/compare/fold_span
2581123
ns/iter (± 17048
)2591087
ns/iter (± 12405
)1.00
css/visitor/compare/fold_span_panic
2763355
ns/iter (± 13929
)2761411
ns/iter (± 10650
)1.00
css/lexer/bootstrap_5_1_3
4467055
ns/iter (± 5674
)4458079
ns/iter (± 4684
)1.00
css/lexer/foundation_6_7_4
3769657
ns/iter (± 2868
)3756489
ns/iter (± 1995
)1.00
css/lexer/tailwind_3_1_1
717062
ns/iter (± 254
)713534
ns/iter (± 532
)1.00
css/parser/bootstrap_5_1_3
19277858
ns/iter (± 175866
)19735381
ns/iter (± 51781
)0.98
css/parser/foundation_6_7_4
15541900
ns/iter (± 36389
)15985505
ns/iter (± 19095
)0.97
css/parser/tailwind_3_1_1
2989800
ns/iter (± 4359
)3060712
ns/iter (± 5656
)0.98
es/codegen/colors
737022
ns/iter (± 405879
)731655
ns/iter (± 395973
)1.01
es/codegen/large
2888458
ns/iter (± 1526052
)2889574
ns/iter (± 1531028
)1.00
es/codegen/with-parser/colors
45367
ns/iter (± 640
)45014
ns/iter (± 128
)1.01
es/codegen/with-parser/large
482467
ns/iter (± 1023
)484317
ns/iter (± 675
)1.00
es/minify/libraries/antd
1146685163
ns/iter (± 10408689
)1153314101
ns/iter (± 9359004
)0.99
es/minify/libraries/d3
241309235
ns/iter (± 530877
)242730983
ns/iter (± 575532
)0.99
es/minify/libraries/echarts
900420376
ns/iter (± 2770669
)906891977
ns/iter (± 2527853
)0.99
es/minify/libraries/jquery
74360904
ns/iter (± 104421
)74745881
ns/iter (± 132608
)0.99
es/minify/libraries/lodash
88441932
ns/iter (± 149972
)88935000
ns/iter (± 294006
)0.99
es/minify/libraries/moment
44097272
ns/iter (± 29822
)44254677
ns/iter (± 42933
)1.00
es/minify/libraries/react
16124293
ns/iter (± 77965
)16164488
ns/iter (± 35719
)1.00
es/minify/libraries/terser
188804560
ns/iter (± 273823
)190080754
ns/iter (± 390454
)0.99
es/minify/libraries/three
321973123
ns/iter (± 511576
)322999123
ns/iter (± 506817
)1.00
es/minify/libraries/typescript
2268351276
ns/iter (± 6210532
)2277740778
ns/iter (± 8549469
)1.00
es/minify/libraries/victory
480717211
ns/iter (± 2295246
)480413938
ns/iter (± 1843816
)1.00
es/minify/libraries/vue
107095727
ns/iter (± 124832
)108209962
ns/iter (± 95334
)0.99
es/visitor/compare/clone
1948787
ns/iter (± 7151
)1947301
ns/iter (± 4848
)1.00
es/visitor/compare/visit_mut_span
2298921
ns/iter (± 6579
)2294285
ns/iter (± 4182
)1.00
es/visitor/compare/visit_mut_span_panic
2319548
ns/iter (± 4964
)2324281
ns/iter (± 5195
)1.00
es/visitor/compare/fold_span
3355158
ns/iter (± 9283
)3352974
ns/iter (± 6416
)1.00
es/visitor/compare/fold_span_panic
3479409
ns/iter (± 9075
)3472470
ns/iter (± 6210
)1.00
es/lexer/colors
13026
ns/iter (± 71
)13173
ns/iter (± 49
)0.99
es/lexer/angular
6127162
ns/iter (± 5173
)6141500
ns/iter (± 6791
)1.00
es/lexer/backbone
788527
ns/iter (± 680
)803811
ns/iter (± 1508
)0.98
es/lexer/jquery
4420627
ns/iter (± 121400
)4545671
ns/iter (± 2193
)0.97
es/lexer/jquery mobile
6750819
ns/iter (± 13640
)6949075
ns/iter (± 3419
)0.97
es/lexer/mootools
3494384
ns/iter (± 4646
)3606903
ns/iter (± 2577
)0.97
es/lexer/underscore
657322
ns/iter (± 509
)684498
ns/iter (± 812
)0.96
es/lexer/three
20971776
ns/iter (± 57305
)21557565
ns/iter (± 90565
)0.97
es/lexer/yui
3779878
ns/iter (± 25139
)3880218
ns/iter (± 4263
)0.97
es/parser/colors
27846
ns/iter (± 67
)27754
ns/iter (± 32
)1.00
es/parser/angular
13685900
ns/iter (± 82460
)13587234
ns/iter (± 67998
)1.01
es/parser/backbone
2033067
ns/iter (± 5565
)2003605
ns/iter (± 9224
)1.01
es/parser/jquery
11124101
ns/iter (± 46852
)10983409
ns/iter (± 50318
)1.01
es/parser/jquery mobile
16949227
ns/iter (± 40758
)16870868
ns/iter (± 152349
)1.00
es/parser/mootools
8550221
ns/iter (± 17908
)8438775
ns/iter (± 16159
)1.01
es/parser/underscore
1755779
ns/iter (± 11259
)1730043
ns/iter (± 8135
)1.01
es/parser/three
47414874
ns/iter (± 201517
)46910176
ns/iter (± 182108
)1.01
es/parser/yui
8457511
ns/iter (± 24921
)8350564
ns/iter (± 26998
)1.01
es/preset-env/usage/builtin_type
139041
ns/iter (± 32442
)138109
ns/iter (± 31782
)1.01
es/preset-env/usage/property
16927
ns/iter (± 56
)16959
ns/iter (± 121
)1.00
es/resolver/typescript
88399126
ns/iter (± 848618
)87530002
ns/iter (± 1201609
)1.01
es/fixer/typescript
63527362
ns/iter (± 506753
)61935767
ns/iter (± 375114
)1.03
es/hygiene/typescript
128919492
ns/iter (± 395514
)129637016
ns/iter (± 858790
)0.99
es/resolver_with_hygiene/typescript
239443564
ns/iter (± 1177961
)239371918
ns/iter (± 1210757
)1.00
es/visitor/base-perf/module_clone
59579
ns/iter (± 215
)58697
ns/iter (± 105
)1.02
es/visitor/base-perf/fold_empty
63465
ns/iter (± 244
)62015
ns/iter (± 388
)1.02
es/visitor/base-perf/fold_noop_impl_all
63542
ns/iter (± 144
)62755
ns/iter (± 201
)1.01
es/visitor/base-perf/fold_noop_impl_vec
63326
ns/iter (± 357
)62197
ns/iter (± 310
)1.02
es/visitor/base-perf/boxing_boxed_clone
57
ns/iter (± 0
)57
ns/iter (± 0
)1
es/visitor/base-perf/boxing_unboxed_clone
38
ns/iter (± 0
)38
ns/iter (± 0
)1
es/visitor/base-perf/boxing_boxed
107
ns/iter (± 0
)106
ns/iter (± 0
)1.01
es/visitor/base-perf/boxing_unboxed
75
ns/iter (± 0
)75
ns/iter (± 0
)1
es/visitor/base-perf/visit_empty
0
ns/iter (± 0
)0
ns/iter (± 0
)NaN
es/visitor/base-perf/visit_contains_this
2521
ns/iter (± 16
)2514
ns/iter (± 10
)1.00
es/base/parallel/resolver/typescript
4228665020
ns/iter (± 266107826
)3649089563
ns/iter (± 232440358
)1.16
es/base/parallel/hygiene/typescript
1446577542
ns/iter (± 12163374
)1460780479
ns/iter (± 24221190
)0.99
misc/visitors/time-complexity/time 5
137
ns/iter (± 0
)133
ns/iter (± 1
)1.03
misc/visitors/time-complexity/time 10
344
ns/iter (± 45
)259
ns/iter (± 0
)1.33
misc/visitors/time-complexity/time 15
522
ns/iter (± 2
)500
ns/iter (± 2
)1.04
misc/visitors/time-complexity/time 20
1061
ns/iter (± 2
)1090
ns/iter (± 23
)0.97
misc/visitors/time-complexity/time 40
3609
ns/iter (± 15
)3555
ns/iter (± 18
)1.02
misc/visitors/time-complexity/time 60
8861
ns/iter (± 6
)7352
ns/iter (± 96
)1.21
es/full-target/es2016
230818
ns/iter (± 1074
)229875
ns/iter (± 330
)1.00
es/full-target/es2017
218633
ns/iter (± 827
)217448
ns/iter (± 981
)1.01
es/full-target/es2018
208039
ns/iter (± 491
)204979
ns/iter (± 682
)1.01
es2020_nullish_coalescing
69889
ns/iter (± 309
)68658
ns/iter (± 565
)1.02
es2020_optional_chaining
78457
ns/iter (± 383
)79088
ns/iter (± 255
)0.99
es2022_class_properties
115982
ns/iter (± 357
)113695
ns/iter (± 420
)1.02
es2018_object_rest_spread
73462
ns/iter (± 905
)73132
ns/iter (± 351
)1.00
es2019_optional_catch_binding
63523
ns/iter (± 248
)61842
ns/iter (± 288
)1.03
es2017_async_to_generator
63720
ns/iter (± 148
)62216
ns/iter (± 265
)1.02
es2016_exponentiation
67712
ns/iter (± 255
)66595
ns/iter (± 552
)1.02
es2015_arrow
71320
ns/iter (± 185
)69565
ns/iter (± 290
)1.03
es2015_block_scoped_fn
66988
ns/iter (± 154
)66215
ns/iter (± 214
)1.01
es2015_block_scoping
120438
ns/iter (± 553
)121310
ns/iter (± 414
)0.99
This comment was automatically generated by workflow using github-action-benchmark.