Skip to content

Commit

Permalink
fix(es/compat): Handle import/export in reserved_word (#7165)
Browse files Browse the repository at this point in the history
  • Loading branch information
magic-akari committed Mar 30, 2023
1 parent b1fb6b6 commit 065d11c
Showing 1 changed file with 39 additions and 6 deletions.
45 changes: 39 additions & 6 deletions crates/swc_ecma_transforms_compat/src/es3/reserved_word.rs
Expand Up @@ -30,7 +30,24 @@ struct ReservedWord {
impl Fold for ReservedWord {
noop_fold_type!();

fn fold_export_specifier(&mut self, n: ExportSpecifier) -> ExportSpecifier {
fn fold_export_named_specifier(&mut self, n: ExportNamedSpecifier) -> ExportNamedSpecifier {
let ident = match n.orig {
ModuleExportName::Ident(ident) if ident.is_reserved_in_es3() => ident,
_ => return n,
};

ExportNamedSpecifier {
orig: ident.clone().fold_with(self).into(),
exported: n.exported.or_else(|| Some(ident.into())),
..n
}
}

fn fold_named_export(&mut self, n: NamedExport) -> NamedExport {
if n.src.is_none() {
return n.fold_children_with(self);
}

n
}

Expand All @@ -39,16 +56,14 @@ impl Fold for ReservedWord {
}

fn fold_import_named_specifier(&mut self, s: ImportNamedSpecifier) -> ImportNamedSpecifier {
if s.imported.is_some() {
if s.local.is_reserved_in_es3() {
ImportNamedSpecifier {
imported: s.imported.or_else(|| Some(s.local.clone().into())),
local: s.local.fold_with(self),
..s
}
} else {
ImportNamedSpecifier {
imported: s.imported.fold_with(self),
..s
}
s
}
}

Expand Down Expand Up @@ -131,4 +146,22 @@ function utf8CheckByte(_byte) {
);

identical!(export_as_default, "export { Foo as default }");

test!(
::swc_ecma_parser::Syntax::default(),
|_| ReservedWord {
preserve_import: false
},
issue_7164,
r#"
import { int } from './a.js'
console.log(int)
export { int };
"#,
r#"
import { int as _int } from './a.js';
console.log(_int);
export { _int as int };
"#
);
}

1 comment on commit 065d11c

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark

Benchmark suite Current: 065d11c Previous: 0259a74 Ratio
es/full/bugs-1 310573 ns/iter (± 7616) 303773 ns/iter (± 6390) 1.02
es/full/minify/libraries/antd 1655685673 ns/iter (± 15279300) 1602580295 ns/iter (± 19911681) 1.03
es/full/minify/libraries/d3 305183655 ns/iter (± 6987096) 296833439 ns/iter (± 6396378) 1.03
es/full/minify/libraries/echarts 1273011758 ns/iter (± 11514661) 1211389918 ns/iter (± 10429939) 1.05
es/full/minify/libraries/jquery 91481560 ns/iter (± 660085) 90930289 ns/iter (± 514708) 1.01
es/full/minify/libraries/lodash 106271655 ns/iter (± 1135306) 104775102 ns/iter (± 779643) 1.01
es/full/minify/libraries/moment 52868094 ns/iter (± 360026) 52403671 ns/iter (± 413840) 1.01
es/full/minify/libraries/react 19380410 ns/iter (± 163680) 18898646 ns/iter (± 157651) 1.03
es/full/minify/libraries/terser 251678979 ns/iter (± 3284225) 243546473 ns/iter (± 4372881) 1.03
es/full/minify/libraries/three 448765914 ns/iter (± 5268233) 430844182 ns/iter (± 3866972) 1.04
es/full/minify/libraries/typescript 3120238668 ns/iter (± 16004181) 2962700813 ns/iter (± 16823854) 1.05
es/full/minify/libraries/victory 698293530 ns/iter (± 8489142) 676366011 ns/iter (± 6687502) 1.03
es/full/minify/libraries/vue 133166982 ns/iter (± 619218) 130375134 ns/iter (± 1358764) 1.02
es/full/codegen/es3 28476 ns/iter (± 55) 28361 ns/iter (± 58) 1.00
es/full/codegen/es5 28613 ns/iter (± 31) 28531 ns/iter (± 48) 1.00
es/full/codegen/es2015 28566 ns/iter (± 37) 28472 ns/iter (± 54) 1.00
es/full/codegen/es2016 28528 ns/iter (± 48) 28469 ns/iter (± 80) 1.00
es/full/codegen/es2017 28539 ns/iter (± 44) 28613 ns/iter (± 338) 1.00
es/full/codegen/es2018 28592 ns/iter (± 41) 28500 ns/iter (± 51) 1.00
es/full/codegen/es2019 28556 ns/iter (± 26) 28466 ns/iter (± 57) 1.00
es/full/codegen/es2020 28592 ns/iter (± 35) 28422 ns/iter (± 50) 1.01
es/full/all/es3 184634738 ns/iter (± 2153135) 178055239 ns/iter (± 3931757) 1.04
es/full/all/es5 172542744 ns/iter (± 3141689) 170158582 ns/iter (± 3001066) 1.01
es/full/all/es2015 134825965 ns/iter (± 1579401) 132224788 ns/iter (± 1254739) 1.02
es/full/all/es2016 133230657 ns/iter (± 1102992) 130654381 ns/iter (± 1930551) 1.02
es/full/all/es2017 131357056 ns/iter (± 1643288) 128829038 ns/iter (± 2297105) 1.02
es/full/all/es2018 126875600 ns/iter (± 1155014) 125406050 ns/iter (± 2470789) 1.01
es/full/all/es2019 125695140 ns/iter (± 1832035) 125044943 ns/iter (± 1592036) 1.01
es/full/all/es2020 118764557 ns/iter (± 662712) 117251532 ns/iter (± 1001671) 1.01
es/full/parser 522091 ns/iter (± 8342) 513341 ns/iter (± 7527) 1.02
es/full/base/fixer 22653 ns/iter (± 33) 22545 ns/iter (± 29) 1.00
es/full/base/resolver_and_hygiene 84496 ns/iter (± 137) 85791 ns/iter (± 78) 0.98
serialization of serde 126 ns/iter (± 0) 121 ns/iter (± 0) 1.04
css/minify/libraries/bootstrap 28141315 ns/iter (± 162086) 27856170 ns/iter (± 141246) 1.01
css/visitor/compare/clone 2140557 ns/iter (± 42383) 2136880 ns/iter (± 21786) 1.00
css/visitor/compare/visit_mut_span 2315020 ns/iter (± 7648) 2343299 ns/iter (± 17532) 0.99
css/visitor/compare/visit_mut_span_panic 2382548 ns/iter (± 6482) 2384801 ns/iter (± 28455) 1.00
css/visitor/compare/fold_span 3084131 ns/iter (± 15389) 3054094 ns/iter (± 16573) 1.01
css/visitor/compare/fold_span_panic 3258936 ns/iter (± 10284) 3208234 ns/iter (± 14058) 1.02
css/lexer/bootstrap_5_1_3 5113849 ns/iter (± 1358) 5107007 ns/iter (± 2140) 1.00
css/lexer/foundation_6_7_4 4333383 ns/iter (± 1648) 4344408 ns/iter (± 1544) 1.00
css/lexer/tailwind_3_1_1 819753 ns/iter (± 206) 823351 ns/iter (± 118) 1.00
css/parser/bootstrap_5_1_3 21133991 ns/iter (± 133033) 21149917 ns/iter (± 119952) 1.00
css/parser/foundation_6_7_4 16644967 ns/iter (± 57818) 16776152 ns/iter (± 75576) 0.99
css/parser/tailwind_3_1_1 3201637 ns/iter (± 3646) 3229234 ns/iter (± 4789) 0.99
es/codegen/colors 325410 ns/iter (± 184498) 326779 ns/iter (± 184873) 1.00
es/codegen/large 1092420 ns/iter (± 552959) 1252477 ns/iter (± 659862) 0.87
es/codegen/with-parser/colors 47269 ns/iter (± 81) 47346 ns/iter (± 117) 1.00
es/codegen/with-parser/large 507926 ns/iter (± 2072) 506833 ns/iter (± 6405) 1.00
es/minify/libraries/antd 1451031002 ns/iter (± 12940828) 1362148127 ns/iter (± 27358036) 1.07
es/minify/libraries/d3 259422440 ns/iter (± 2764506) 264018553 ns/iter (± 6415229) 0.98
es/minify/libraries/echarts 1097567034 ns/iter (± 11992089) 1061968409 ns/iter (± 14326944) 1.03
es/minify/libraries/jquery 80752407 ns/iter (± 565357) 79317336 ns/iter (± 911816) 1.02
es/minify/libraries/lodash 96166360 ns/iter (± 773636) 94646438 ns/iter (± 716978) 1.02
es/minify/libraries/moment 46258310 ns/iter (± 383040) 45492172 ns/iter (± 219949) 1.02
es/minify/libraries/react 17125933 ns/iter (± 122407) 16959703 ns/iter (± 106670) 1.01
es/minify/libraries/terser 217739793 ns/iter (± 2564270) 209086919 ns/iter (± 3013243) 1.04
es/minify/libraries/three 374754332 ns/iter (± 5188191) 359661731 ns/iter (± 4760763) 1.04
es/minify/libraries/typescript 2675912407 ns/iter (± 17611453) 2496163452 ns/iter (± 24177281) 1.07
es/minify/libraries/victory 592714094 ns/iter (± 9869612) 565457402 ns/iter (± 8085607) 1.05
es/minify/libraries/vue 116815636 ns/iter (± 1060100) 115720130 ns/iter (± 969936) 1.01
es/visitor/compare/clone 2347263 ns/iter (± 10761) 2345259 ns/iter (± 14080) 1.00
es/visitor/compare/visit_mut_span 2727461 ns/iter (± 4644) 2702594 ns/iter (± 5110) 1.01
es/visitor/compare/visit_mut_span_panic 2762658 ns/iter (± 4064) 2782321 ns/iter (± 5112) 0.99
es/visitor/compare/fold_span 3834399 ns/iter (± 6576) 3836674 ns/iter (± 11375) 1.00
es/visitor/compare/fold_span_panic 3939326 ns/iter (± 9108) 3928433 ns/iter (± 4930) 1.00
es/lexer/colors 12906 ns/iter (± 17) 13002 ns/iter (± 23) 0.99
es/lexer/angular 6316600 ns/iter (± 1752) 6345124 ns/iter (± 2930) 1.00
es/lexer/backbone 777122 ns/iter (± 291) 779903 ns/iter (± 560) 1.00
es/lexer/jquery 4367738 ns/iter (± 2311) 4375616 ns/iter (± 17390) 1.00
es/lexer/jquery mobile 6805913 ns/iter (± 3954) 6822050 ns/iter (± 11308) 1.00
es/lexer/mootools 3413916 ns/iter (± 1115) 3432484 ns/iter (± 2582) 0.99
es/lexer/underscore 643955 ns/iter (± 2227) 645259 ns/iter (± 292) 1.00
es/lexer/three 20682074 ns/iter (± 18182) 20649906 ns/iter (± 7066) 1.00
es/lexer/yui 3811512 ns/iter (± 15465) 3835968 ns/iter (± 3223) 0.99
es/parser/colors 29007 ns/iter (± 124) 28511 ns/iter (± 60) 1.02
es/parser/angular 15131606 ns/iter (± 153769) 14947977 ns/iter (± 154079) 1.01
es/parser/backbone 2146744 ns/iter (± 11918) 2164948 ns/iter (± 15158) 0.99
es/parser/jquery 12005720 ns/iter (± 179808) 11765740 ns/iter (± 135012) 1.02
es/parser/jquery mobile 19217572 ns/iter (± 258163) 18424580 ns/iter (± 156670) 1.04
es/parser/mootools 8934562 ns/iter (± 25957) 8932125 ns/iter (± 32048) 1.00
es/parser/underscore 1815985 ns/iter (± 9304) 1822427 ns/iter (± 9673) 1.00
es/parser/three 55777560 ns/iter (± 326598) 53760489 ns/iter (± 441668) 1.04
es/parser/yui 9054058 ns/iter (± 80812) 8966886 ns/iter (± 52897) 1.01
es/preset-env/usage/builtin_type 145565 ns/iter (± 34581) 145235 ns/iter (± 35174) 1.00
es/preset-env/usage/property 21006 ns/iter (± 63) 21104 ns/iter (± 107) 1.00
es/resolver/typescript 121375498 ns/iter (± 2609756) 111539249 ns/iter (± 1980711) 1.09
es/fixer/typescript 87895778 ns/iter (± 1993675) 79927142 ns/iter (± 3192747) 1.10
es/hygiene/typescript 190054824 ns/iter (± 1070914) 176664109 ns/iter (± 3734612) 1.08
es/resolver_with_hygiene/typescript 330346195 ns/iter (± 2317008) 307210402 ns/iter (± 2686664) 1.08
es/visitor/base-perf/module_clone 81143 ns/iter (± 507) 80932 ns/iter (± 368) 1.00
es/visitor/base-perf/fold_empty 90330 ns/iter (± 382) 90792 ns/iter (± 930) 0.99
es/visitor/base-perf/fold_noop_impl_all 90755 ns/iter (± 287) 90748 ns/iter (± 332) 1.00
es/visitor/base-perf/fold_noop_impl_vec 90489 ns/iter (± 495) 91489 ns/iter (± 318) 0.99
es/visitor/base-perf/boxing_boxed_clone 58 ns/iter (± 0) 56 ns/iter (± 0) 1.04
es/visitor/base-perf/boxing_unboxed_clone 43 ns/iter (± 0) 42 ns/iter (± 0) 1.02
es/visitor/base-perf/boxing_boxed 102 ns/iter (± 0) 102 ns/iter (± 0) 1
es/visitor/base-perf/boxing_unboxed 78 ns/iter (± 0) 78 ns/iter (± 0) 1
es/visitor/base-perf/visit_contains_this 3446 ns/iter (± 67) 3518 ns/iter (± 60) 0.98
es/base/parallel/resolver/typescript 6266369265 ns/iter (± 568116739) 5960677271 ns/iter (± 506314201) 1.05
es/base/parallel/hygiene/typescript 2218254561 ns/iter (± 29379558) 2024342669 ns/iter (± 31855275) 1.10
misc/visitors/time-complexity/time 5 102 ns/iter (± 0) 109 ns/iter (± 0) 0.94
misc/visitors/time-complexity/time 10 339 ns/iter (± 0) 355 ns/iter (± 0) 0.95
misc/visitors/time-complexity/time 15 659 ns/iter (± 0) 682 ns/iter (± 0) 0.97
misc/visitors/time-complexity/time 20 1236 ns/iter (± 27) 1266 ns/iter (± 21) 0.98
misc/visitors/time-complexity/time 40 6715 ns/iter (± 44) 6827 ns/iter (± 80) 0.98
misc/visitors/time-complexity/time 60 17214 ns/iter (± 132) 17320 ns/iter (± 148) 0.99
es/full-target/es2016 252122 ns/iter (± 423) 253859 ns/iter (± 304) 0.99
es/full-target/es2017 245040 ns/iter (± 444) 245370 ns/iter (± 331) 1.00
es/full-target/es2018 235263 ns/iter (± 514) 235364 ns/iter (± 497) 1.00
es2020_nullish_coalescing 92571 ns/iter (± 173) 93579 ns/iter (± 269) 0.99
es2020_optional_chaining 124396 ns/iter (± 211) 124365 ns/iter (± 275) 1.00
es2022_class_properties 148573 ns/iter (± 315) 149493 ns/iter (± 315) 0.99
es2018_object_rest_spread 95984 ns/iter (± 224) 96430 ns/iter (± 218) 1.00
es2019_optional_catch_binding 85028 ns/iter (± 212) 85597 ns/iter (± 198) 0.99
es2017_async_to_generator 85440 ns/iter (± 150) 85920 ns/iter (± 217) 0.99
es2016_exponentiation 90448 ns/iter (± 279) 90756 ns/iter (± 296) 1.00
es2015_arrow 93830 ns/iter (± 277) 94546 ns/iter (± 315) 0.99
es2015_block_scoped_fn 91716 ns/iter (± 768) 92490 ns/iter (± 197) 0.99
es2015_block_scoping 166759 ns/iter (± 233) 170357 ns/iter (± 250) 0.98

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

Please sign in to comment.