1
+ use swc_common:: { util:: take:: Take , DUMMY_SP } ;
1
2
use swc_ecma_ast:: * ;
2
- use swc_ecma_visit:: { noop_fold_type , Fold , FoldWith } ;
3
+ use swc_ecma_visit:: { as_folder , noop_visit_mut_type , Fold , VisitMut , VisitMutWith } ;
3
4
use swc_trace_macro:: swc_trace;
4
5
5
6
/// babel: `@babel/plugin-transform-reserved-words`
@@ -19,84 +20,106 @@ use swc_trace_macro::swc_trace;
19
20
/// var _abstract = 1;
20
21
/// var x = _abstract + 1;
21
22
/// ```
22
- pub fn reserved_words ( preserve_import : bool ) -> impl Fold {
23
- ReservedWord { preserve_import }
23
+ pub fn reserved_words ( preserve_import : bool ) -> impl VisitMut + Fold {
24
+ as_folder ( ReservedWord { preserve_import } )
24
25
}
25
26
struct ReservedWord {
26
27
pub preserve_import : bool ,
27
28
}
28
29
29
30
#[ swc_trace]
30
- impl Fold for ReservedWord {
31
- noop_fold_type ! ( ) ;
31
+ impl VisitMut for ReservedWord {
32
+ noop_visit_mut_type ! ( ) ;
33
+
34
+ fn visit_mut_module_items ( & mut self , n : & mut Vec < ModuleItem > ) {
35
+ let mut extra_exports = vec ! [ ] ;
36
+
37
+ n. iter_mut ( ) . for_each ( |module_item| {
38
+ if let Some ( ( ident, decl) ) = match module_item {
39
+ ModuleItem :: ModuleDecl ( ModuleDecl :: ExportDecl ( ExportDecl { decl, .. } ) ) => {
40
+ let ident = decl
41
+ . as_fn_decl ( )
42
+ . filter ( |fn_decl| fn_decl. ident . is_reserved_in_es3 ( ) )
43
+ . map ( |fn_decl| fn_decl. ident . clone ( ) ) ;
44
+
45
+ ident. map ( |ident| ( ident, decl. take ( ) ) )
46
+ }
47
+ _ => None ,
48
+ } {
49
+ * module_item = ModuleItem :: Stmt ( decl. into ( ) ) ;
50
+
51
+ let mut orig = ident. clone ( ) ;
52
+ orig. visit_mut_with ( self ) ;
53
+
54
+ extra_exports. push (
55
+ ExportNamedSpecifier {
56
+ span : DUMMY_SP ,
57
+ orig : orig. into ( ) ,
58
+ exported : Some ( ident. into ( ) ) ,
59
+ is_type_only : false ,
60
+ }
61
+ . into ( ) ,
62
+ ) ;
63
+ }
32
64
33
- fn fold_export_named_specifier ( & mut self , n : ExportNamedSpecifier ) -> ExportNamedSpecifier {
34
- let ident = match n. orig {
35
- ModuleExportName :: Ident ( ident) if ident. is_reserved_in_es3 ( ) => ident,
36
- _ => return n,
37
- } ;
65
+ module_item. visit_mut_with ( self ) ;
66
+ } ) ;
67
+
68
+ if !extra_exports. is_empty ( ) {
69
+ let module_item = ModuleItem :: ModuleDecl (
70
+ NamedExport {
71
+ span : DUMMY_SP ,
72
+ specifiers : extra_exports,
73
+ src : None ,
74
+ type_only : false ,
75
+ asserts : None ,
76
+ }
77
+ . into ( ) ,
78
+ ) ;
38
79
39
- ExportNamedSpecifier {
40
- orig : ident. clone ( ) . fold_with ( self ) . into ( ) ,
41
- exported : n. exported . or_else ( || Some ( ident. into ( ) ) ) ,
42
- ..n
80
+ n. push ( module_item) ;
43
81
}
44
82
}
45
83
46
- fn fold_named_export ( & mut self , n : NamedExport ) -> NamedExport {
47
- if n. src . is_none ( ) {
48
- return n. fold_children_with ( self ) ;
84
+ fn visit_mut_export_named_specifier ( & mut self , n : & mut ExportNamedSpecifier ) {
85
+ if matches ! ( & n. orig, ModuleExportName :: Ident ( ident) if ident. is_reserved_in_es3( ) ) {
86
+ n. exported . get_or_insert_with ( || n. orig . clone ( ) ) ;
87
+ n. orig . visit_mut_with ( self ) ;
49
88
}
50
-
51
- n
52
89
}
53
90
54
- fn fold_ident ( & mut self , i : Ident ) -> Ident {
55
- fold_ident ( self . preserve_import , i)
91
+ fn visit_mut_named_export ( & mut self , n : & mut NamedExport ) {
92
+ if n. src . is_none ( ) {
93
+ n. visit_mut_children_with ( self ) ;
94
+ }
56
95
}
57
96
58
- fn fold_import_named_specifier ( & mut self , s : ImportNamedSpecifier ) -> ImportNamedSpecifier {
59
- if s. local . is_reserved_in_es3 ( ) {
60
- ImportNamedSpecifier {
61
- imported : s. imported . or_else ( || Some ( s. local . clone ( ) . into ( ) ) ) ,
62
- local : s. local . fold_with ( self ) ,
63
- ..s
64
- }
65
- } else {
66
- s
97
+ fn visit_mut_ident ( & mut self , i : & mut Ident ) {
98
+ if self . preserve_import && i. sym == * "import" {
99
+ return ;
67
100
}
68
- }
69
101
70
- fn fold_member_expr ( & mut self , e : MemberExpr ) -> MemberExpr {
71
- MemberExpr {
72
- obj : e. obj . fold_with ( self ) ,
73
- prop : if let MemberProp :: Computed ( c) = e. prop {
74
- MemberProp :: Computed ( c. fold_with ( self ) )
75
- } else {
76
- e. prop
77
- } ,
78
- ..e
102
+ if i. is_reserved_in_es3 ( ) {
103
+ i. sym = format ! ( "_{}" , i. sym) . into ( )
79
104
}
80
105
}
81
106
82
- fn fold_prop_name ( & mut self , n : PropName ) -> PropName {
83
- n
107
+ fn visit_mut_import_named_specifier ( & mut self , s : & mut ImportNamedSpecifier ) {
108
+ if s. local . is_reserved_in_es3 ( ) {
109
+ s. imported . get_or_insert_with ( || s. local . clone ( ) . into ( ) ) ;
110
+ s. local . visit_mut_with ( self ) ;
111
+ }
84
112
}
85
- }
86
113
87
- fn fold_ident ( preserve_import : bool , i : Ident ) -> Ident {
88
- if preserve_import && i. sym == * "import" {
89
- return i;
90
- }
114
+ fn visit_mut_member_expr ( & mut self , e : & mut MemberExpr ) {
115
+ e. obj . visit_mut_with ( self ) ;
91
116
92
- if i. is_reserved_in_es3 ( ) {
93
- return Ident {
94
- sym : format ! ( "_{}" , i. sym) . into ( ) ,
95
- ..i
96
- } ;
117
+ if let MemberProp :: Computed ( c) = & mut e. prop {
118
+ c. visit_mut_with ( self ) ;
119
+ }
97
120
}
98
121
99
- i
122
+ fn visit_mut_prop_name ( & mut self , _ : & mut PropName ) { }
100
123
}
101
124
102
125
#[ cfg( test) ]
@@ -109,9 +132,7 @@ mod tests {
109
132
( $name: ident, $src: literal) => {
110
133
test!(
111
134
:: swc_ecma_parser:: Syntax :: default ( ) ,
112
- |_| ReservedWord {
113
- preserve_import: false
114
- } ,
135
+ |_| reserved_words( false ) ,
115
136
$name,
116
137
$src,
117
138
$src
@@ -121,9 +142,7 @@ mod tests {
121
142
122
143
test ! (
123
144
:: swc_ecma_parser:: Syntax :: default ( ) ,
124
- |_| ReservedWord {
125
- preserve_import: false
126
- } ,
145
+ |_| reserved_words( false ) ,
127
146
babel_issue_6477,
128
147
r#"
129
148
function utf8CheckByte(byte) {
@@ -149,9 +168,7 @@ function utf8CheckByte(_byte) {
149
168
150
169
test ! (
151
170
:: swc_ecma_parser:: Syntax :: default ( ) ,
152
- |_| ReservedWord {
153
- preserve_import: false
154
- } ,
171
+ |_| reserved_words( false ) ,
155
172
issue_7164,
156
173
r#"
157
174
import { int } from './a.js'
@@ -164,4 +181,23 @@ function utf8CheckByte(_byte) {
164
181
export { _int as int };
165
182
"#
166
183
) ;
184
+
185
+ test ! (
186
+ Default :: default ( ) ,
187
+ |_| reserved_words( false ) ,
188
+ issue_7237,
189
+ r#"
190
+ export function char() {
191
+ console.log("char====char");
192
+ return "";
193
+ }
194
+ "# ,
195
+ r#"
196
+ function _char() {
197
+ console.log("char====char");
198
+ return "";
199
+ }
200
+ export { _char as char };
201
+ "#
202
+ ) ;
167
203
}
1 commit comments
github-actions[bot] commentedon Apr 12, 2023
Benchmark
es/full/bugs-1
319841
ns/iter (± 11750
)315765
ns/iter (± 16102
)1.01
es/full/minify/libraries/antd
1598574737
ns/iter (± 17935378
)1587314589
ns/iter (± 19895504
)1.01
es/full/minify/libraries/d3
299333735
ns/iter (± 9891090
)298140636
ns/iter (± 10277053
)1.00
es/full/minify/libraries/echarts
1229622569
ns/iter (± 11519514
)1213888651
ns/iter (± 16868572
)1.01
es/full/minify/libraries/jquery
90837007
ns/iter (± 854164
)90506682
ns/iter (± 1547090
)1.00
es/full/minify/libraries/lodash
107023415
ns/iter (± 1199954
)106162635
ns/iter (± 1649507
)1.01
es/full/minify/libraries/moment
52444737
ns/iter (± 755033
)52864156
ns/iter (± 314137
)0.99
es/full/minify/libraries/react
19120961
ns/iter (± 274679
)19436642
ns/iter (± 327834
)0.98
es/full/minify/libraries/terser
246653632
ns/iter (± 8169385
)247667293
ns/iter (± 1780584
)1.00
es/full/minify/libraries/three
447032834
ns/iter (± 8336998
)444968535
ns/iter (± 6147193
)1.00
es/full/minify/libraries/typescript
2980949680
ns/iter (± 14891421
)2938249500
ns/iter (± 20180615
)1.01
es/full/minify/libraries/victory
686469403
ns/iter (± 12218935
)675348497
ns/iter (± 8650905
)1.02
es/full/minify/libraries/vue
132518779
ns/iter (± 3198801
)133376074
ns/iter (± 3929929
)0.99
es/full/codegen/es3
28588
ns/iter (± 117
)28949
ns/iter (± 56
)0.99
es/full/codegen/es5
28633
ns/iter (± 68
)29086
ns/iter (± 62
)0.98
es/full/codegen/es2015
28662
ns/iter (± 59
)29080
ns/iter (± 57
)0.99
es/full/codegen/es2016
28653
ns/iter (± 50
)29051
ns/iter (± 48
)0.99
es/full/codegen/es2017
28662
ns/iter (± 57
)29105
ns/iter (± 60
)0.98
es/full/codegen/es2018
28673
ns/iter (± 67
)29111
ns/iter (± 75
)0.98
es/full/codegen/es2019
28619
ns/iter (± 33
)29152
ns/iter (± 62
)0.98
es/full/codegen/es2020
28642
ns/iter (± 59
)29129
ns/iter (± 83
)0.98
es/full/all/es3
181465576
ns/iter (± 3503722
)185362398
ns/iter (± 2452259
)0.98
es/full/all/es5
175541080
ns/iter (± 2348694
)176126921
ns/iter (± 1900434
)1.00
es/full/all/es2015
134701490
ns/iter (± 3126389
)138050433
ns/iter (± 2557908
)0.98
es/full/all/es2016
133287230
ns/iter (± 1351787
)133995062
ns/iter (± 2435533
)0.99
es/full/all/es2017
132806810
ns/iter (± 2384609
)130843956
ns/iter (± 2904641
)1.02
es/full/all/es2018
127118127
ns/iter (± 2110436
)127578322
ns/iter (± 5242779
)1.00
es/full/all/es2019
127084738
ns/iter (± 1823082
)126857185
ns/iter (± 1868445
)1.00
es/full/all/es2020
118715970
ns/iter (± 1367735
)119153484
ns/iter (± 1529293
)1.00
es/full/parser
507971
ns/iter (± 8354
)514532
ns/iter (± 8043
)0.99
es/full/base/fixer
23215
ns/iter (± 50
)22959
ns/iter (± 35
)1.01
es/full/base/resolver_and_hygiene
84303
ns/iter (± 1426
)86955
ns/iter (± 137
)0.97
serialization of serde
120
ns/iter (± 0
)121
ns/iter (± 0
)0.99
css/minify/libraries/bootstrap
27694096
ns/iter (± 174392
)27315175
ns/iter (± 77955
)1.01
css/visitor/compare/clone
2138700
ns/iter (± 13022
)2128723
ns/iter (± 10897
)1.00
css/visitor/compare/visit_mut_span
2327704
ns/iter (± 5947
)2342959
ns/iter (± 3555
)0.99
css/visitor/compare/visit_mut_span_panic
2374429
ns/iter (± 12612
)2383127
ns/iter (± 3439
)1.00
css/visitor/compare/fold_span
3117002
ns/iter (± 13920
)3095908
ns/iter (± 12829
)1.01
css/visitor/compare/fold_span_panic
3269839
ns/iter (± 11692
)3233969
ns/iter (± 16785
)1.01
css/lexer/bootstrap_5_1_3
5126547
ns/iter (± 4996
)5106207
ns/iter (± 20864
)1.00
css/lexer/foundation_6_7_4
4319596
ns/iter (± 3383
)4341285
ns/iter (± 2778
)1.00
css/lexer/tailwind_3_1_1
820941
ns/iter (± 571
)823718
ns/iter (± 305
)1.00
css/parser/bootstrap_5_1_3
21331778
ns/iter (± 156274
)21199935
ns/iter (± 180394
)1.01
css/parser/foundation_6_7_4
16854889
ns/iter (± 57380
)16879038
ns/iter (± 102723
)1.00
css/parser/tailwind_3_1_1
3260791
ns/iter (± 4511
)3246933
ns/iter (± 8807
)1.00
es/codegen/colors
317318
ns/iter (± 180354
)326502
ns/iter (± 185653
)0.97
es/codegen/large
1330943
ns/iter (± 638891
)1254649
ns/iter (± 659051
)1.06
es/codegen/with-parser/colors
47122
ns/iter (± 255
)47538
ns/iter (± 379
)0.99
es/codegen/with-parser/large
507945
ns/iter (± 1086
)509736
ns/iter (± 1045
)1.00
es/minify/libraries/antd
1382987100
ns/iter (± 12607535
)1341652799
ns/iter (± 11979495
)1.03
es/minify/libraries/d3
258570553
ns/iter (± 4743149
)254833439
ns/iter (± 5060070
)1.01
es/minify/libraries/echarts
1061884887
ns/iter (± 6311290
)1035409227
ns/iter (± 16025202
)1.03
es/minify/libraries/jquery
79756150
ns/iter (± 1657326
)79403099
ns/iter (± 502181
)1.00
es/minify/libraries/lodash
94809999
ns/iter (± 1909168
)95793180
ns/iter (± 1780742
)0.99
es/minify/libraries/moment
45738653
ns/iter (± 402384
)46085189
ns/iter (± 391089
)0.99
es/minify/libraries/react
17174691
ns/iter (± 222895
)17305582
ns/iter (± 483210
)0.99
es/minify/libraries/terser
210716749
ns/iter (± 4135258
)207192230
ns/iter (± 4322670
)1.02
es/minify/libraries/three
363620588
ns/iter (± 8487442
)356461583
ns/iter (± 8604742
)1.02
es/minify/libraries/typescript
2509355106
ns/iter (± 18701281
)2495097778
ns/iter (± 17433550
)1.01
es/minify/libraries/victory
574382339
ns/iter (± 11579920
)543344743
ns/iter (± 11798925
)1.06
es/minify/libraries/vue
116745440
ns/iter (± 1347402
)114630589
ns/iter (± 1046688
)1.02
es/visitor/compare/clone
2339340
ns/iter (± 7312
)2300601
ns/iter (± 15291
)1.02
es/visitor/compare/visit_mut_span
2695320
ns/iter (± 3628
)2669819
ns/iter (± 4551
)1.01
es/visitor/compare/visit_mut_span_panic
2723896
ns/iter (± 3831
)2736173
ns/iter (± 3926
)1.00
es/visitor/compare/fold_span
3799684
ns/iter (± 11297
)3788995
ns/iter (± 8268
)1.00
es/visitor/compare/fold_span_panic
3936049
ns/iter (± 10469
)3936930
ns/iter (± 4055
)1.00
es/lexer/colors
13091
ns/iter (± 85
)13119
ns/iter (± 8
)1.00
es/lexer/angular
6344562
ns/iter (± 2097
)6347651
ns/iter (± 4325
)1.00
es/lexer/backbone
781528
ns/iter (± 553
)784698
ns/iter (± 599
)1.00
es/lexer/jquery
4385692
ns/iter (± 3343
)4390041
ns/iter (± 3049
)1.00
es/lexer/jquery mobile
6857084
ns/iter (± 9672
)6861509
ns/iter (± 3825
)1.00
es/lexer/mootools
3432173
ns/iter (± 7321
)3444117
ns/iter (± 7475
)1.00
es/lexer/underscore
647079
ns/iter (± 702
)647442
ns/iter (± 349
)1.00
es/lexer/three
20890170
ns/iter (± 32001
)20869670
ns/iter (± 15039
)1.00
es/lexer/yui
3870943
ns/iter (± 4941
)3855536
ns/iter (± 1848
)1.00
es/parser/colors
29040
ns/iter (± 84
)29031
ns/iter (± 62
)1.00
es/parser/angular
15339952
ns/iter (± 307470
)15055752
ns/iter (± 256691
)1.02
es/parser/backbone
2186741
ns/iter (± 14612
)2164260
ns/iter (± 11209
)1.01
es/parser/jquery
11887295
ns/iter (± 91286
)11876406
ns/iter (± 114220
)1.00
es/parser/jquery mobile
18765530
ns/iter (± 282258
)18449123
ns/iter (± 395140
)1.02
es/parser/mootools
9029073
ns/iter (± 32294
)8979694
ns/iter (± 21625
)1.01
es/parser/underscore
1839203
ns/iter (± 9342
)1824504
ns/iter (± 9665
)1.01
es/parser/three
54852324
ns/iter (± 477248
)54310520
ns/iter (± 449054
)1.01
es/parser/yui
9188641
ns/iter (± 115998
)9111370
ns/iter (± 28895
)1.01
es/preset-env/usage/builtin_type
142176
ns/iter (± 35399
)143892
ns/iter (± 33607
)0.99
es/preset-env/usage/property
20392
ns/iter (± 139
)21278
ns/iter (± 61
)0.96
es/resolver/typescript
111173243
ns/iter (± 1765413
)110315223
ns/iter (± 2852671
)1.01
es/fixer/typescript
78846285
ns/iter (± 354346
)79881524
ns/iter (± 1958158
)0.99
es/hygiene/typescript
165564028
ns/iter (± 1936376
)167594849
ns/iter (± 1225488
)0.99
es/resolver_with_hygiene/typescript
311681223
ns/iter (± 2360477
)301102017
ns/iter (± 2901350
)1.04
es/visitor/base-perf/module_clone
80418
ns/iter (± 413
)81252
ns/iter (± 584
)0.99
es/visitor/base-perf/fold_empty
90471
ns/iter (± 290
)90782
ns/iter (± 734
)1.00
es/visitor/base-perf/fold_noop_impl_all
90819
ns/iter (± 406
)90804
ns/iter (± 345
)1.00
es/visitor/base-perf/fold_noop_impl_vec
91049
ns/iter (± 413
)90754
ns/iter (± 320
)1.00
es/visitor/base-perf/boxing_boxed_clone
57
ns/iter (± 0
)58
ns/iter (± 0
)0.98
es/visitor/base-perf/boxing_unboxed_clone
41
ns/iter (± 0
)41
ns/iter (± 0
)1
es/visitor/base-perf/boxing_boxed
103
ns/iter (± 0
)102
ns/iter (± 0
)1.01
es/visitor/base-perf/boxing_unboxed
78
ns/iter (± 0
)78
ns/iter (± 0
)1
es/visitor/base-perf/visit_contains_this
3467
ns/iter (± 56
)3504
ns/iter (± 75
)0.99
es/base/parallel/resolver/typescript
6087025568
ns/iter (± 327771265
)6252530668
ns/iter (± 446322032
)0.97
es/base/parallel/hygiene/typescript
2013673655
ns/iter (± 30656083
)2008230070
ns/iter (± 26527131
)1.00
misc/visitors/time-complexity/time 5
103
ns/iter (± 0
)99
ns/iter (± 0
)1.04
misc/visitors/time-complexity/time 10
338
ns/iter (± 3
)331
ns/iter (± 0
)1.02
misc/visitors/time-complexity/time 15
657
ns/iter (± 4
)649
ns/iter (± 10
)1.01
misc/visitors/time-complexity/time 20
1250
ns/iter (± 2
)1197
ns/iter (± 1
)1.04
misc/visitors/time-complexity/time 40
6210
ns/iter (± 4
)6521
ns/iter (± 41
)0.95
misc/visitors/time-complexity/time 60
15598
ns/iter (± 37
)17054
ns/iter (± 43
)0.91
es/full-target/es2016
254285
ns/iter (± 396
)252839
ns/iter (± 659
)1.01
es/full-target/es2017
247509
ns/iter (± 455
)246169
ns/iter (± 511
)1.01
es/full-target/es2018
236931
ns/iter (± 1562
)235305
ns/iter (± 301
)1.01
es2020_nullish_coalescing
93327
ns/iter (± 411
)92660
ns/iter (± 438
)1.01
es2020_optional_chaining
123953
ns/iter (± 164
)125484
ns/iter (± 242
)0.99
es2022_class_properties
149176
ns/iter (± 269
)148987
ns/iter (± 379
)1.00
es2018_object_rest_spread
96831
ns/iter (± 200
)95929
ns/iter (± 238
)1.01
es2019_optional_catch_binding
85379
ns/iter (± 193
)85547
ns/iter (± 162
)1.00
es2017_async_to_generator
86102
ns/iter (± 306
)86072
ns/iter (± 176
)1.00
es2016_exponentiation
90219
ns/iter (± 309
)90480
ns/iter (± 249
)1.00
es2015_arrow
94127
ns/iter (± 304
)94225
ns/iter (± 185
)1.00
es2015_block_scoped_fn
92105
ns/iter (± 245
)92323
ns/iter (± 143
)1.00
es2015_block_scoping
169942
ns/iter (± 279
)169692
ns/iter (± 300
)1.00
This comment was automatically generated by workflow using github-action-benchmark.