|
1 | 1 | use std::mem;
|
2 | 2 |
|
3 | 3 | use serde::Deserialize;
|
| 4 | +use swc_atoms::js_word; |
4 | 5 | use swc_common::{util::take::Take, DUMMY_SP};
|
5 | 6 | use swc_ecma_ast::*;
|
6 | 7 | use swc_ecma_utils::{
|
@@ -181,7 +182,13 @@ impl OptChaining {
|
181 | 182 | next = m.obj.take();
|
182 | 183 | m.prop.visit_mut_with(self);
|
183 | 184 | chain.push(if optional {
|
184 |
| - Gathering::OptMember(m.take(), self.memoize(&next)) |
| 185 | + match *next { |
| 186 | + Expr::This(_) => Gathering::OptMember( |
| 187 | + m.take(), |
| 188 | + Ident::new(js_word!("this"), DUMMY_SP), |
| 189 | + ), |
| 190 | + _ => Gathering::OptMember(m.take(), self.memoize(&next)), |
| 191 | + } |
185 | 192 | } else {
|
186 | 193 | Gathering::Member(m.take())
|
187 | 194 | });
|
@@ -299,7 +306,11 @@ impl OptChaining {
|
299 | 306 | Gathering::OptMember(mut m, memo) => {
|
300 | 307 | committed_cond.push(CondExpr {
|
301 | 308 | span: DUMMY_SP,
|
302 |
| - test: init_and_eq_null_or_undefined(&memo, current, no_document_all), |
| 309 | + test: if memo.sym == js_word!("this") { |
| 310 | + eq_null_or_undefined(&memo, no_document_all) |
| 311 | + } else { |
| 312 | + init_and_eq_null_or_undefined(&memo, current, no_document_all) |
| 313 | + }, |
303 | 314 | cons: if is_delete {
|
304 | 315 | true.into()
|
305 | 316 | } else {
|
@@ -409,3 +420,37 @@ fn init_and_eq_null_or_undefined(i: &Ident, init: Expr, no_document_all: bool) -
|
409 | 420 | right: void_cmp,
|
410 | 421 | }))
|
411 | 422 | }
|
| 423 | + |
| 424 | +fn eq_null_or_undefined(i: &Ident, no_document_all: bool) -> Box<Expr> { |
| 425 | + let lhs = Box::new(Expr::Ident(i.clone())); |
| 426 | + |
| 427 | + if no_document_all { |
| 428 | + return Box::new(Expr::Bin(BinExpr { |
| 429 | + span: DUMMY_SP, |
| 430 | + left: lhs, |
| 431 | + op: op!("=="), |
| 432 | + right: Box::new(Expr::Lit(Lit::Null(Null { span: DUMMY_SP }))), |
| 433 | + })); |
| 434 | + } |
| 435 | + |
| 436 | + let null_cmp = Box::new(Expr::Bin(BinExpr { |
| 437 | + span: DUMMY_SP, |
| 438 | + left: lhs, |
| 439 | + op: op!("==="), |
| 440 | + right: Box::new(Expr::Lit(Lit::Null(Null { span: DUMMY_SP }))), |
| 441 | + })); |
| 442 | + |
| 443 | + let void_cmp = Box::new(Expr::Bin(BinExpr { |
| 444 | + span: DUMMY_SP, |
| 445 | + left: Box::new(Expr::Ident(i.clone())), |
| 446 | + op: op!("==="), |
| 447 | + right: undefined(DUMMY_SP), |
| 448 | + })); |
| 449 | + |
| 450 | + Box::new(Expr::Bin(BinExpr { |
| 451 | + span: DUMMY_SP, |
| 452 | + left: null_cmp, |
| 453 | + op: op!("||"), |
| 454 | + right: void_cmp, |
| 455 | + })) |
| 456 | +} |
1 commit comments
github-actions[bot] commentedon Jul 28, 2023
Benchmark
es/full/bugs-1
292613
ns/iter (± 9598
)288126
ns/iter (± 7369
)1.02
es/full/minify/libraries/antd
1300970785
ns/iter (± 10885766
)1331311908
ns/iter (± 25989677
)0.98
es/full/minify/libraries/d3
278938859
ns/iter (± 3232583
)281959320
ns/iter (± 5183671
)0.99
es/full/minify/libraries/echarts
1062319957
ns/iter (± 5585420
)1090060535
ns/iter (± 9008808
)0.97
es/full/minify/libraries/jquery
84274554
ns/iter (± 166924
)85045341
ns/iter (± 200947
)0.99
es/full/minify/libraries/lodash
98100362
ns/iter (± 349352
)98396843
ns/iter (± 680771
)1.00
es/full/minify/libraries/moment
49631568
ns/iter (± 199292
)49510157
ns/iter (± 233972
)1.00
es/full/minify/libraries/react
17918933
ns/iter (± 33046
)17963478
ns/iter (± 99869
)1.00
es/full/minify/libraries/terser
220362223
ns/iter (± 924512
)219291746
ns/iter (± 1141463
)1.00
es/full/minify/libraries/three
383423154
ns/iter (± 1423791
)392335249
ns/iter (± 4392139
)0.98
es/full/minify/libraries/typescript
2657663795
ns/iter (± 8921129
)2678456645
ns/iter (± 23849411
)0.99
es/full/minify/libraries/victory
568475799
ns/iter (± 3692065
)556786690
ns/iter (± 4144755
)1.02
es/full/minify/libraries/vue
120116784
ns/iter (± 247052
)120116640
ns/iter (± 474001
)1.00
es/full/codegen/es3
34428
ns/iter (± 80
)35114
ns/iter (± 81
)0.98
es/full/codegen/es5
34489
ns/iter (± 135
)34975
ns/iter (± 62
)0.99
es/full/codegen/es2015
34454
ns/iter (± 82
)34932
ns/iter (± 107
)0.99
es/full/codegen/es2016
34452
ns/iter (± 87
)35006
ns/iter (± 85
)0.98
es/full/codegen/es2017
34464
ns/iter (± 77
)34842
ns/iter (± 92
)0.99
es/full/codegen/es2018
34480
ns/iter (± 84
)34925
ns/iter (± 122
)0.99
es/full/codegen/es2019
34509
ns/iter (± 99
)34945
ns/iter (± 77
)0.99
es/full/codegen/es2020
34524
ns/iter (± 79
)34866
ns/iter (± 97
)0.99
es/full/all/es3
174104513
ns/iter (± 835650
)173987823
ns/iter (± 711433
)1.00
es/full/all/es5
164630441
ns/iter (± 1609662
)166206174
ns/iter (± 729470
)0.99
es/full/all/es2015
124699369
ns/iter (± 904112
)123800359
ns/iter (± 563337
)1.01
es/full/all/es2016
123155353
ns/iter (± 381471
)123666557
ns/iter (± 1142741
)1.00
es/full/all/es2017
122801784
ns/iter (± 1719036
)122822377
ns/iter (± 961373
)1.00
es/full/all/es2018
120767613
ns/iter (± 561454
)120275809
ns/iter (± 618639
)1.00
es/full/all/es2019
120283544
ns/iter (± 786964
)120234905
ns/iter (± 2247746
)1.00
es/full/all/es2020
115831872
ns/iter (± 407535
)115415297
ns/iter (± 697124
)1.00
es/full/parser
529611
ns/iter (± 5239
)525666
ns/iter (± 6178
)1.01
es/full/base/fixer
17998
ns/iter (± 249
)19716
ns/iter (± 133
)0.91
es/full/base/resolver_and_hygiene
83186
ns/iter (± 118
)84972
ns/iter (± 167
)0.98
serialization of serde
298
ns/iter (± 0
)297
ns/iter (± 2
)1.00
css/minify/libraries/bootstrap
28909367
ns/iter (± 53277
)29381964
ns/iter (± 83086
)0.98
css/visitor/compare/clone
1632123
ns/iter (± 8182
)1635052
ns/iter (± 7194
)1.00
css/visitor/compare/visit_mut_span
1770668
ns/iter (± 4589
)1763429
ns/iter (± 4810
)1.00
css/visitor/compare/visit_mut_span_panic
1831081
ns/iter (± 4005
)1840397
ns/iter (± 5012
)0.99
css/visitor/compare/fold_span
2561220
ns/iter (± 14094
)2559334
ns/iter (± 12968
)1.00
css/visitor/compare/fold_span_panic
2763839
ns/iter (± 17572
)2755912
ns/iter (± 20586
)1.00
css/lexer/bootstrap_5_1_3
4462435
ns/iter (± 3064
)4447586
ns/iter (± 7480
)1.00
css/lexer/foundation_6_7_4
3754639
ns/iter (± 3275
)3752394
ns/iter (± 3320
)1.00
css/lexer/tailwind_3_1_1
715398
ns/iter (± 1303
)712017
ns/iter (± 837
)1.00
css/parser/bootstrap_5_1_3
20104286
ns/iter (± 89068
)20193719
ns/iter (± 132837
)1.00
css/parser/foundation_6_7_4
16081542
ns/iter (± 45943
)16148443
ns/iter (± 22982
)1.00
css/parser/tailwind_3_1_1
3107646
ns/iter (± 4425
)3056699
ns/iter (± 7074
)1.02
es/codegen/colors
734643
ns/iter (± 401977
)735568
ns/iter (± 402114
)1.00
es/codegen/large
3134420
ns/iter (± 1682394
)3142620
ns/iter (± 1678067
)1.00
es/codegen/with-parser/colors
45036
ns/iter (± 465
)43649
ns/iter (± 471
)1.03
es/codegen/with-parser/large
483091
ns/iter (± 726
)480876
ns/iter (± 719
)1.00
es/minify/libraries/antd
1138085686
ns/iter (± 16542090
)1121835170
ns/iter (± 9327105
)1.01
es/minify/libraries/d3
241913269
ns/iter (± 3309026
)239345307
ns/iter (± 2247513
)1.01
es/minify/libraries/echarts
907587296
ns/iter (± 5670936
)895782126
ns/iter (± 3944785
)1.01
es/minify/libraries/jquery
74357527
ns/iter (± 149135
)73404735
ns/iter (± 133346
)1.01
es/minify/libraries/lodash
88941073
ns/iter (± 172555
)88261895
ns/iter (± 831666
)1.01
es/minify/libraries/moment
43817384
ns/iter (± 57538
)43474106
ns/iter (± 91032
)1.01
es/minify/libraries/react
16176232
ns/iter (± 29087
)16040529
ns/iter (± 91813
)1.01
es/minify/libraries/terser
188149099
ns/iter (± 321922
)185874162
ns/iter (± 758847
)1.01
es/minify/libraries/three
323129330
ns/iter (± 671538
)319249540
ns/iter (± 1653147
)1.01
es/minify/libraries/typescript
2282172089
ns/iter (± 8093874
)2254891319
ns/iter (± 20285605
)1.01
es/minify/libraries/victory
472456794
ns/iter (± 2202431
)465245455
ns/iter (± 1801333
)1.02
es/minify/libraries/vue
108088286
ns/iter (± 291029
)106632562
ns/iter (± 137025
)1.01
es/visitor/compare/clone
1928984
ns/iter (± 3274
)1961030
ns/iter (± 4404
)0.98
es/visitor/compare/visit_mut_span
2270956
ns/iter (± 7797
)2311761
ns/iter (± 5444
)0.98
es/visitor/compare/visit_mut_span_panic
2317299
ns/iter (± 3812
)2346410
ns/iter (± 5202
)0.99
es/visitor/compare/fold_span
3313534
ns/iter (± 4216
)3363434
ns/iter (± 6442
)0.99
es/visitor/compare/fold_span_panic
3477057
ns/iter (± 3457
)3491073
ns/iter (± 28720
)1.00
es/lexer/colors
12546
ns/iter (± 13
)12634
ns/iter (± 39
)0.99
es/lexer/angular
6180161
ns/iter (± 7938
)6174529
ns/iter (± 5275
)1.00
es/lexer/backbone
800903
ns/iter (± 7709
)808771
ns/iter (± 2506
)0.99
es/lexer/jquery
4489655
ns/iter (± 5784
)4513445
ns/iter (± 1119
)0.99
es/lexer/jquery mobile
6946337
ns/iter (± 30668
)6942246
ns/iter (± 3863
)1.00
es/lexer/mootools
3569666
ns/iter (± 12949
)3593660
ns/iter (± 8363
)0.99
es/lexer/underscore
674907
ns/iter (± 1014
)673202
ns/iter (± 951
)1.00
es/lexer/three
21248544
ns/iter (± 44746
)21236998
ns/iter (± 27080
)1.00
es/lexer/yui
3850698
ns/iter (± 5118
)3902840
ns/iter (± 2964
)0.99
es/parser/colors
26273
ns/iter (± 53
)26487
ns/iter (± 92
)0.99
es/parser/angular
13411388
ns/iter (± 40783
)13223671
ns/iter (± 69924
)1.01
es/parser/backbone
1994840
ns/iter (± 18508
)1966022
ns/iter (± 9783
)1.01
es/parser/jquery
10742773
ns/iter (± 34447
)10658625
ns/iter (± 55502
)1.01
es/parser/jquery mobile
16567063
ns/iter (± 35543
)16295363
ns/iter (± 51250
)1.02
es/parser/mootools
8294620
ns/iter (± 16078
)8217752
ns/iter (± 17334
)1.01
es/parser/underscore
1708116
ns/iter (± 9213
)1692274
ns/iter (± 10071
)1.01
es/parser/three
45986206
ns/iter (± 175509
)46075807
ns/iter (± 417081
)1.00
es/parser/yui
8203693
ns/iter (± 30971
)8105646
ns/iter (± 25869
)1.01
es/preset-env/usage/builtin_type
134705
ns/iter (± 32207
)133955
ns/iter (± 30893
)1.01
es/preset-env/usage/property
16316
ns/iter (± 47
)16629
ns/iter (± 119
)0.98
es/resolver/typescript
88854912
ns/iter (± 1223927
)88141443
ns/iter (± 1578360
)1.01
es/fixer/typescript
63851246
ns/iter (± 269961
)63497731
ns/iter (± 790017
)1.01
es/hygiene/typescript
132918356
ns/iter (± 743705
)130692640
ns/iter (± 525776
)1.02
es/resolver_with_hygiene/typescript
243198368
ns/iter (± 761162
)241417072
ns/iter (± 1209933
)1.01
es/visitor/base-perf/module_clone
60913
ns/iter (± 420
)60891
ns/iter (± 216
)1.00
es/visitor/base-perf/fold_empty
64057
ns/iter (± 608
)66153
ns/iter (± 171
)0.97
es/visitor/base-perf/fold_noop_impl_all
64264
ns/iter (± 636
)66625
ns/iter (± 470
)0.96
es/visitor/base-perf/fold_noop_impl_vec
65396
ns/iter (± 573
)67257
ns/iter (± 2045
)0.97
es/visitor/base-perf/boxing_boxed_clone
57
ns/iter (± 0
)57
ns/iter (± 0
)1
es/visitor/base-perf/boxing_unboxed_clone
40
ns/iter (± 0
)39
ns/iter (± 0
)1.03
es/visitor/base-perf/boxing_boxed
109
ns/iter (± 0
)116
ns/iter (± 0
)0.94
es/visitor/base-perf/boxing_unboxed
77
ns/iter (± 0
)77
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
2539
ns/iter (± 12
)2511
ns/iter (± 9
)1.01
es/base/parallel/resolver/typescript
4384674556
ns/iter (± 295005176
)4467485394
ns/iter (± 262302335
)0.98
es/base/parallel/hygiene/typescript
1474789056
ns/iter (± 20767135
)1454762581
ns/iter (± 16822850
)1.01
misc/visitors/time-complexity/time 5
136
ns/iter (± 1
)136
ns/iter (± 6
)1
misc/visitors/time-complexity/time 10
385
ns/iter (± 2
)380
ns/iter (± 3
)1.01
misc/visitors/time-complexity/time 15
676
ns/iter (± 4
)525
ns/iter (± 2
)1.29
misc/visitors/time-complexity/time 20
1061
ns/iter (± 6
)1061
ns/iter (± 15
)1
misc/visitors/time-complexity/time 40
3578
ns/iter (± 27
)3543
ns/iter (± 6
)1.01
misc/visitors/time-complexity/time 60
7337
ns/iter (± 24
)7467
ns/iter (± 53
)0.98
es/full-target/es2016
235681
ns/iter (± 1163
)238296
ns/iter (± 1344
)0.99
es/full-target/es2017
224478
ns/iter (± 533
)225322
ns/iter (± 991
)1.00
es/full-target/es2018
212600
ns/iter (± 787
)212996
ns/iter (± 1350
)1.00
es2020_nullish_coalescing
68723
ns/iter (± 440
)71613
ns/iter (± 384
)0.96
es2020_optional_chaining
79314
ns/iter (± 257
)81616
ns/iter (± 315
)0.97
es2022_class_properties
118367
ns/iter (± 303
)118237
ns/iter (± 337
)1.00
es2018_object_rest_spread
73189
ns/iter (± 308
)75493
ns/iter (± 2184
)0.97
es2019_optional_catch_binding
61952
ns/iter (± 209
)65242
ns/iter (± 217
)0.95
es2017_async_to_generator
61887
ns/iter (± 226
)64321
ns/iter (± 422
)0.96
es2016_exponentiation
67051
ns/iter (± 221
)68993
ns/iter (± 213
)0.97
es2015_arrow
70026
ns/iter (± 196
)72003
ns/iter (± 225
)0.97
es2015_block_scoped_fn
66764
ns/iter (± 267
)68669
ns/iter (± 117
)0.97
es2015_block_scoping
122251
ns/iter (± 721
)120221
ns/iter (± 1381
)1.02
This comment was automatically generated by workflow using github-action-benchmark.