@@ -55,6 +55,7 @@ impl From<u32> for Char {
55
55
56
56
pub ( crate ) struct CharIter ( SmallVec < [ char ; 7 ] > ) ;
57
57
58
+ /// Ported from https://github.com/web-infra-dev/oxc/blob/99a4816ce7b6132b2667257984f9d92ae3768f03/crates/oxc_parser/src/lexer/mod.rs#L1349-L1374
58
59
impl IntoIterator for Char {
59
60
type IntoIter = CharIter ;
60
61
type Item = char ;
@@ -69,20 +70,28 @@ impl IntoIterator for Char {
69
70
CharIter ( match char:: from_u32 ( self . 0 ) {
70
71
Some ( c) => smallvec ! [ c] ,
71
72
None => {
72
- let c = unsafe { char:: from_u32_unchecked ( self . 0 ) } ;
73
- let escaped = c. escape_unicode ( ) . to_string ( ) ;
73
+ let mut buf = smallvec ! [ ] ;
74
74
75
- debug_assert ! ( escaped . starts_with ( '\\' ) ) ;
75
+ let high = self . 0 & 0xffff0000 >> 16 ;
76
76
77
- let mut buf = smallvec ! [ ] ;
78
- buf. push ( '\\' ) ;
79
- buf. push ( '\0' ) ;
80
- buf. push ( 'u' ) ;
77
+ let low = self . 0 & 0x0000ffff ;
81
78
82
- if escaped. len ( ) == 8 {
83
- buf. extend ( escaped[ 3 ..=6 ] . chars ( ) ) ;
79
+ // The second code unit of a surrogate pair is always in the range from 0xDC00
80
+ // to 0xDFFF, and is called a low surrogate or a trail surrogate.
81
+ if !( 0xdc00 ..=0xdfff ) . contains ( & low) {
82
+ buf. push ( '\\' ) ;
83
+ buf. push ( 'u' ) ;
84
+ buf. extend ( format ! ( "{high:x}" ) . chars ( ) ) ;
85
+ buf. push ( '\\' ) ;
86
+ buf. push ( 'u' ) ;
87
+ buf. extend ( format ! ( "{low:x}" ) . chars ( ) ) ;
84
88
} else {
85
- buf. extend ( escaped[ 2 ..] . chars ( ) ) ;
89
+ // `https://tc39.es/ecma262/#sec-utf16decodesurrogatepair`
90
+ let astral_code_point = ( high - 0xd800 ) * 0x400 + low - 0xdc00 + 0x10000 ;
91
+
92
+ buf. push ( '\\' ) ;
93
+ buf. push ( 'u' ) ;
94
+ buf. extend ( format ! ( "{astral_code_point:x}" ) . chars ( ) ) ;
86
95
}
87
96
88
97
buf
1 commit comments
github-actions[bot] commentedon Aug 16, 2023
Benchmark
es/full/bugs-1
288636
ns/iter (± 6993
)284055
ns/iter (± 5375
)1.02
es/full/minify/libraries/antd
1322030778
ns/iter (± 19388878
)1321495201
ns/iter (± 13665152
)1.00
es/full/minify/libraries/d3
272123651
ns/iter (± 3165031
)277267110
ns/iter (± 1462154
)0.98
es/full/minify/libraries/echarts
1057658124
ns/iter (± 8826843
)1052466619
ns/iter (± 11413827
)1.00
es/full/minify/libraries/jquery
84981244
ns/iter (± 197210
)84832326
ns/iter (± 86368
)1.00
es/full/minify/libraries/lodash
98420258
ns/iter (± 281812
)98206031
ns/iter (± 167926
)1.00
es/full/minify/libraries/moment
49920560
ns/iter (± 458400
)49962411
ns/iter (± 95581
)1.00
es/full/minify/libraries/react
18018448
ns/iter (± 52485
)17983205
ns/iter (± 46817
)1.00
es/full/minify/libraries/terser
220191443
ns/iter (± 1506787
)218879392
ns/iter (± 1369152
)1.01
es/full/minify/libraries/three
385568237
ns/iter (± 1655649
)383350893
ns/iter (± 1777864
)1.01
es/full/minify/libraries/typescript
2676292546
ns/iter (± 14166789
)2672034877
ns/iter (± 12155552
)1.00
es/full/minify/libraries/victory
573290633
ns/iter (± 6035343
)580560639
ns/iter (± 5305655
)0.99
es/full/minify/libraries/vue
120742143
ns/iter (± 295304
)120416280
ns/iter (± 364068
)1.00
es/full/codegen/es3
35003
ns/iter (± 115
)35234
ns/iter (± 79
)0.99
es/full/codegen/es5
35010
ns/iter (± 53
)35215
ns/iter (± 78
)0.99
es/full/codegen/es2015
35016
ns/iter (± 142
)35286
ns/iter (± 86
)0.99
es/full/codegen/es2016
34991
ns/iter (± 103
)35221
ns/iter (± 95
)0.99
es/full/codegen/es2017
35087
ns/iter (± 447
)35288
ns/iter (± 72
)0.99
es/full/codegen/es2018
35070
ns/iter (± 150
)35212
ns/iter (± 95
)1.00
es/full/codegen/es2019
35044
ns/iter (± 80
)35194
ns/iter (± 116
)1.00
es/full/codegen/es2020
35062
ns/iter (± 61
)35240
ns/iter (± 111
)0.99
es/full/all/es3
169992626
ns/iter (± 1834897
)169021014
ns/iter (± 1373862
)1.01
es/full/all/es5
162315773
ns/iter (± 1087248
)160805929
ns/iter (± 1539014
)1.01
es/full/all/es2015
120824552
ns/iter (± 558375
)120338300
ns/iter (± 564282
)1.00
es/full/all/es2016
119189941
ns/iter (± 527764
)118747705
ns/iter (± 658059
)1.00
es/full/all/es2017
119032321
ns/iter (± 827929
)118504855
ns/iter (± 783939
)1.00
es/full/all/es2018
116565943
ns/iter (± 450884
)116549496
ns/iter (± 501797
)1.00
es/full/all/es2019
115752579
ns/iter (± 392763
)115431518
ns/iter (± 1663059
)1.00
es/full/all/es2020
111294239
ns/iter (± 1806121
)111004264
ns/iter (± 2593980
)1.00
es/full/parser
484679
ns/iter (± 3256
)494674
ns/iter (± 4690
)0.98
es/full/base/fixer
17585
ns/iter (± 47
)19435
ns/iter (± 98
)0.90
es/full/base/resolver_and_hygiene
79587
ns/iter (± 748
)82347
ns/iter (± 353
)0.97
serialization of serde
291
ns/iter (± 2
)293
ns/iter (± 0
)0.99
css/minify/libraries/bootstrap
30015443
ns/iter (± 107447
)28747417
ns/iter (± 43888
)1.04
css/visitor/compare/clone
1649228
ns/iter (± 24145
)1648837
ns/iter (± 8333
)1.00
css/visitor/compare/visit_mut_span
1766549
ns/iter (± 10265
)1769997
ns/iter (± 4789
)1.00
css/visitor/compare/visit_mut_span_panic
1852369
ns/iter (± 23069
)1837692
ns/iter (± 2551
)1.01
css/visitor/compare/fold_span
2566121
ns/iter (± 10811
)2599453
ns/iter (± 6436
)0.99
css/visitor/compare/fold_span_panic
2741722
ns/iter (± 9991
)2769366
ns/iter (± 16134
)0.99
css/lexer/bootstrap_5_1_3
4447062
ns/iter (± 34180
)4530288
ns/iter (± 23969
)0.98
css/lexer/foundation_6_7_4
3746492
ns/iter (± 1912
)3800071
ns/iter (± 3034
)0.99
css/lexer/tailwind_3_1_1
711633
ns/iter (± 1365
)723326
ns/iter (± 374
)0.98
css/parser/bootstrap_5_1_3
19511856
ns/iter (± 241040
)19066785
ns/iter (± 90366
)1.02
css/parser/foundation_6_7_4
15686508
ns/iter (± 14446
)15394323
ns/iter (± 101223
)1.02
css/parser/tailwind_3_1_1
3036624
ns/iter (± 2131
)2942565
ns/iter (± 3754
)1.03
es/codegen/colors
740022
ns/iter (± 404481
)737381
ns/iter (± 403066
)1.00
es/codegen/large
2904806
ns/iter (± 1530129
)3162105
ns/iter (± 1664579
)0.92
es/codegen/with-parser/colors
46116
ns/iter (± 207
)44933
ns/iter (± 581
)1.03
es/codegen/with-parser/large
486899
ns/iter (± 683
)484679
ns/iter (± 690
)1.00
es/minify/libraries/antd
1173469536
ns/iter (± 17104191
)1136508598
ns/iter (± 9192760
)1.03
es/minify/libraries/d3
240901922
ns/iter (± 608773
)240068034
ns/iter (± 1222725
)1.00
es/minify/libraries/echarts
916346139
ns/iter (± 5032112
)911568947
ns/iter (± 6029929
)1.01
es/minify/libraries/jquery
73793547
ns/iter (± 115659
)73549662
ns/iter (± 130703
)1.00
es/minify/libraries/lodash
87849194
ns/iter (± 201204
)87621884
ns/iter (± 222458
)1.00
es/minify/libraries/moment
43506408
ns/iter (± 63847
)43341436
ns/iter (± 83278
)1.00
es/minify/libraries/react
16013943
ns/iter (± 46848
)15974064
ns/iter (± 41657
)1.00
es/minify/libraries/terser
189022877
ns/iter (± 1334070
)186714002
ns/iter (± 458378
)1.01
es/minify/libraries/three
335080964
ns/iter (± 9147349
)319652491
ns/iter (± 1519407
)1.05
es/minify/libraries/typescript
2338615432
ns/iter (± 24290309
)2263992960
ns/iter (± 9307777
)1.03
es/minify/libraries/victory
519509998
ns/iter (± 12089772
)479624719
ns/iter (± 2140663
)1.08
es/minify/libraries/vue
110400159
ns/iter (± 1661655
)106374833
ns/iter (± 223652
)1.04
es/visitor/compare/clone
1940648
ns/iter (± 4811
)1929442
ns/iter (± 5936
)1.01
es/visitor/compare/visit_mut_span
2280226
ns/iter (± 4693
)2233365
ns/iter (± 2708
)1.02
es/visitor/compare/visit_mut_span_panic
2329730
ns/iter (± 24559
)2301447
ns/iter (± 1835
)1.01
es/visitor/compare/fold_span
3540043
ns/iter (± 59565
)3343465
ns/iter (± 4395
)1.06
es/visitor/compare/fold_span_panic
3655167
ns/iter (± 29877
)3468371
ns/iter (± 13827
)1.05
es/lexer/colors
13129
ns/iter (± 29
)13486
ns/iter (± 40
)0.97
es/lexer/angular
6105410
ns/iter (± 5589
)6205237
ns/iter (± 8215
)0.98
es/lexer/backbone
793894
ns/iter (± 1473
)813859
ns/iter (± 2835
)0.98
es/lexer/jquery
4479731
ns/iter (± 4277
)4621616
ns/iter (± 6277
)0.97
es/lexer/jquery mobile
6860056
ns/iter (± 4403
)7014112
ns/iter (± 6860
)0.98
es/lexer/mootools
3557281
ns/iter (± 3705
)3626080
ns/iter (± 1648
)0.98
es/lexer/underscore
666279
ns/iter (± 2174
)684340
ns/iter (± 387
)0.97
es/lexer/three
21509846
ns/iter (± 24279
)21833769
ns/iter (± 16552
)0.99
es/lexer/yui
3831564
ns/iter (± 2587
)3901601
ns/iter (± 4499
)0.98
es/parser/colors
28069
ns/iter (± 58
)27974
ns/iter (± 98
)1.00
es/parser/angular
13822530
ns/iter (± 84196
)13403316
ns/iter (± 62616
)1.03
es/parser/backbone
2034428
ns/iter (± 6384
)1980636
ns/iter (± 7308
)1.03
es/parser/jquery
11055371
ns/iter (± 46105
)10810636
ns/iter (± 45271
)1.02
es/parser/jquery mobile
16945610
ns/iter (± 75471
)16565840
ns/iter (± 36493
)1.02
es/parser/mootools
8533870
ns/iter (± 20809
)8352854
ns/iter (± 15936
)1.02
es/parser/underscore
1747855
ns/iter (± 10316
)1711357
ns/iter (± 10651
)1.02
es/parser/three
48670826
ns/iter (± 452514
)46516499
ns/iter (± 229236
)1.05
es/parser/yui
8437201
ns/iter (± 35765
)8271685
ns/iter (± 29979
)1.02
es/preset-env/usage/builtin_type
136603
ns/iter (± 32197
)137053
ns/iter (± 32748
)1.00
es/preset-env/usage/property
16807
ns/iter (± 79
)16872
ns/iter (± 104
)1.00
es/resolver/typescript
90213962
ns/iter (± 1454630
)87970764
ns/iter (± 855785
)1.03
es/fixer/typescript
64924050
ns/iter (± 1561414
)63033981
ns/iter (± 614829
)1.03
es/hygiene/typescript
132379934
ns/iter (± 1170358
)130767927
ns/iter (± 1035122
)1.01
es/resolver_with_hygiene/typescript
243486621
ns/iter (± 1507382
)243856475
ns/iter (± 1427041
)1.00
es/visitor/base-perf/module_clone
60520
ns/iter (± 296
)59182
ns/iter (± 204
)1.02
es/visitor/base-perf/fold_empty
64118
ns/iter (± 158
)63669
ns/iter (± 224
)1.01
es/visitor/base-perf/fold_noop_impl_all
63876
ns/iter (± 753
)64040
ns/iter (± 313
)1.00
es/visitor/base-perf/fold_noop_impl_vec
64880
ns/iter (± 330
)64300
ns/iter (± 291
)1.01
es/visitor/base-perf/boxing_boxed_clone
58
ns/iter (± 0
)57
ns/iter (± 0
)1.02
es/visitor/base-perf/boxing_unboxed_clone
40
ns/iter (± 0
)38
ns/iter (± 0
)1.05
es/visitor/base-perf/boxing_boxed
105
ns/iter (± 0
)108
ns/iter (± 1
)0.97
es/visitor/base-perf/boxing_unboxed
75
ns/iter (± 0
)78
ns/iter (± 0
)0.96
es/visitor/base-perf/visit_empty
0
ns/iter (± 0
)0
ns/iter (± 0
)NaN
es/visitor/base-perf/visit_contains_this
2581
ns/iter (± 14
)2591
ns/iter (± 20
)1.00
es/base/parallel/resolver/typescript
4084810886
ns/iter (± 309075363
)4457335696
ns/iter (± 228911829
)0.92
es/base/parallel/hygiene/typescript
1462569620
ns/iter (± 12485381
)1451798630
ns/iter (± 12304265
)1.01
misc/visitors/time-complexity/time 5
134
ns/iter (± 7
)137
ns/iter (± 0
)0.98
misc/visitors/time-complexity/time 10
379
ns/iter (± 0
)383
ns/iter (± 7
)0.99
misc/visitors/time-complexity/time 15
523
ns/iter (± 1
)526
ns/iter (± 5
)0.99
misc/visitors/time-complexity/time 20
1019
ns/iter (± 2
)1047
ns/iter (± 2
)0.97
misc/visitors/time-complexity/time 40
3652
ns/iter (± 13
)3548
ns/iter (± 9
)1.03
misc/visitors/time-complexity/time 60
7402
ns/iter (± 27
)7357
ns/iter (± 28
)1.01
es/full-target/es2016
232238
ns/iter (± 532
)231628
ns/iter (± 1377
)1.00
es/full-target/es2017
221214
ns/iter (± 836
)218781
ns/iter (± 772
)1.01
es/full-target/es2018
208563
ns/iter (± 777
)207047
ns/iter (± 788
)1.01
es2020_nullish_coalescing
71803
ns/iter (± 177
)70748
ns/iter (± 395
)1.01
es2020_optional_chaining
80451
ns/iter (± 259
)81699
ns/iter (± 232
)0.98
es2022_class_properties
117186
ns/iter (± 486
)115210
ns/iter (± 751
)1.02
es2018_object_rest_spread
75503
ns/iter (± 236
)76464
ns/iter (± 880
)0.99
es2019_optional_catch_binding
66374
ns/iter (± 278
)63850
ns/iter (± 277
)1.04
es2017_async_to_generator
64871
ns/iter (± 155
)63865
ns/iter (± 178
)1.02
es2016_exponentiation
69481
ns/iter (± 189
)68494
ns/iter (± 176
)1.01
es2015_arrow
72750
ns/iter (± 317
)71985
ns/iter (± 254
)1.01
es2015_block_scoped_fn
69698
ns/iter (± 170
)68406
ns/iter (± 283
)1.02
es2015_block_scoping
123807
ns/iter (± 482
)120707
ns/iter (± 403
)1.03
This comment was automatically generated by workflow using github-action-benchmark.