Skip to content

Commit

Permalink
fix(es/minifier): Don't create invalid property names (#7010)
Browse files Browse the repository at this point in the history
  • Loading branch information
magic-akari committed Mar 4, 2023
1 parent 28ee1e0 commit bb2486c
Show file tree
Hide file tree
Showing 4 changed files with 85 additions and 1 deletion.
10 changes: 9 additions & 1 deletion crates/swc_ecma_minifier/src/compress/optimize/arguments.rs
Expand Up @@ -3,7 +3,7 @@ use std::iter::repeat_with;
use swc_atoms::js_word;
use swc_common::{util::take::Take, DUMMY_SP};
use swc_ecma_ast::*;
use swc_ecma_utils::{find_pat_ids, private_ident};
use swc_ecma_utils::{find_pat_ids, is_valid_prop_ident, private_ident};
use swc_ecma_visit::{noop_visit_mut_type, VisitMut, VisitMutWith};

use super::Optimizer;
Expand All @@ -29,6 +29,10 @@ where
return;
}

if !is_valid_prop_ident(&s.value) {
return;
}

self.changed = true;
report_change!("arguments: Optimizing computed access to arguments");
*prop = MemberProp::Ident(Ident {
Expand All @@ -47,6 +51,10 @@ where
return;
}

if !is_valid_prop_ident(&s.value) {
return;
}

self.changed = true;
report_change!("arguments: Optimizing computed access to arguments");
*prop = SuperProp::Ident(Ident {
Expand Down
46 changes: 46 additions & 0 deletions crates/swc_ecma_minifier/tests/fixture/issues/7009/config.json
@@ -0,0 +1,46 @@
{
"arguments": true,
"arrows": true,
"booleans": true,
"booleans_as_integers": false,
"collapse_vars": true,
"comparisons": true,
"computed_props": true,
"conditionals": true,
"dead_code": true,
"directives": true,
"drop_console": false,
"drop_debugger": true,
"evaluate": true,
"expression": false,
"hoist_funs": false,
"hoist_props": true,
"hoist_vars": false,
"if_return": true,
"join_vars": true,
"keep_classnames": false,
"keep_fargs": true,
"keep_fnames": false,
"keep_infinity": false,
"loops": true,
"negate_iife": true,
"properties": true,
"reduce_funcs": false,
"reduce_vars": false,
"side_effects": true,
"switches": true,
"typeofs": true,
"unsafe": false,
"unsafe_arrows": false,
"unsafe_comps": false,
"unsafe_Function": false,
"unsafe_math": false,
"unsafe_symbols": false,
"unsafe_methods": false,
"unsafe_proto": false,
"unsafe_regexp": false,
"unsafe_undefined": false,
"unused": true,
"const_to_let": true,
"pristine_globals": true
}
20 changes: 20 additions & 0 deletions crates/swc_ecma_minifier/tests/fixture/issues/7009/input.js
@@ -0,0 +1,20 @@
export const example1 = (param) =>
param => param["There is something wrong!"];

export const example2 = (param) =>
param => param["123 is fine"];

export const example3 = (param) =>
param => param["! That is fine !"];

export const example4 = (param) =>
param => param[" space in start works fine"];

export const example5 = (param) =>
param => param[123];

export class Foo extends Bar {
foo() {
super["a space b"]();
}
}
10 changes: 10 additions & 0 deletions crates/swc_ecma_minifier/tests/fixture/issues/7009/output.js
@@ -0,0 +1,10 @@
export const example1 = (param)=>(param)=>param["There is something wrong!"];
export const example2 = (param)=>(param)=>param["123 is fine"];
export const example3 = (param)=>(param)=>param["! That is fine !"];
export const example4 = (param)=>(param)=>param[" space in start works fine"];
export const example5 = (param)=>(param)=>param[123];
export class Foo extends Bar {
foo() {
super["a space b"]();
}
}

1 comment on commit bb2486c

@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: bb2486c Previous: 06cbb90 Ratio
es/full/bugs-1 312837 ns/iter (± 18734) 323247 ns/iter (± 13490) 0.97
es/full/minify/libraries/antd 1784895320 ns/iter (± 33965472) 1870745596 ns/iter (± 24531993) 0.95
es/full/minify/libraries/d3 326213405 ns/iter (± 6309793) 347399605 ns/iter (± 4545707) 0.94
es/full/minify/libraries/echarts 1363344113 ns/iter (± 31656594) 1419258897 ns/iter (± 8022353) 0.96
es/full/minify/libraries/jquery 97976869 ns/iter (± 2977271) 100113421 ns/iter (± 2697464) 0.98
es/full/minify/libraries/lodash 112819611 ns/iter (± 2626682) 115005927 ns/iter (± 1223892) 0.98
es/full/minify/libraries/moment 55804747 ns/iter (± 1265407) 56851891 ns/iter (± 786501) 0.98
es/full/minify/libraries/react 20160313 ns/iter (± 401088) 20444960 ns/iter (± 140695) 0.99
es/full/minify/libraries/terser 262782627 ns/iter (± 11161932) 275773216 ns/iter (± 4132626) 0.95
es/full/minify/libraries/three 473490213 ns/iter (± 8228999) 511796938 ns/iter (± 9667460) 0.93
es/full/minify/libraries/typescript 3295695168 ns/iter (± 31372213) 3438046605 ns/iter (± 18729509) 0.96
es/full/minify/libraries/victory 710409839 ns/iter (± 20893514) 808182583 ns/iter (± 12695936) 0.88
es/full/minify/libraries/vue 134231341 ns/iter (± 1929872) 144350716 ns/iter (± 1607964) 0.93
es/full/codegen/es3 26542 ns/iter (± 30) 26218 ns/iter (± 87) 1.01
es/full/codegen/es5 26551 ns/iter (± 59) 26225 ns/iter (± 359) 1.01
es/full/codegen/es2015 26470 ns/iter (± 46) 26247 ns/iter (± 40) 1.01
es/full/codegen/es2016 26540 ns/iter (± 42) 26203 ns/iter (± 31) 1.01
es/full/codegen/es2017 26566 ns/iter (± 73) 26190 ns/iter (± 88) 1.01
es/full/codegen/es2018 26475 ns/iter (± 49) 26155 ns/iter (± 52) 1.01
es/full/codegen/es2019 26553 ns/iter (± 49) 26227 ns/iter (± 47) 1.01
es/full/codegen/es2020 26478 ns/iter (± 49) 26178 ns/iter (± 94) 1.01
es/full/all/es3 177024319 ns/iter (± 2008782) 168611584 ns/iter (± 3801871) 1.05
es/full/all/es5 168503257 ns/iter (± 3334603) 163064822 ns/iter (± 1933427) 1.03
es/full/all/es2015 132054805 ns/iter (± 1875265) 126998456 ns/iter (± 2537856) 1.04
es/full/all/es2016 131593227 ns/iter (± 1684583) 123250897 ns/iter (± 1368951) 1.07
es/full/all/es2017 127411089 ns/iter (± 1993917) 124733680 ns/iter (± 2046347) 1.02
es/full/all/es2018 125026315 ns/iter (± 1913835) 121164637 ns/iter (± 1282608) 1.03
es/full/all/es2019 126250854 ns/iter (± 2373171) 119260890 ns/iter (± 1471134) 1.06
es/full/all/es2020 120186771 ns/iter (± 1841783) 116607365 ns/iter (± 2118738) 1.03
es/full/parser 546531 ns/iter (± 8235) 532219 ns/iter (± 8524) 1.03
es/full/base/fixer 22029 ns/iter (± 31) 22186 ns/iter (± 161) 0.99
es/full/base/resolver_and_hygiene 82013 ns/iter (± 139) 81679 ns/iter (± 45) 1.00
serialization of ast node 125 ns/iter (± 0) 124 ns/iter (± 0) 1.01
serialization of serde 125 ns/iter (± 0) 124 ns/iter (± 0) 1.01
css/minify/libraries/bootstrap 28244895 ns/iter (± 71448) 29540822 ns/iter (± 374551) 0.96
css/visitor/compare/clone 2097745 ns/iter (± 19099) 2104276 ns/iter (± 14667) 1.00
css/visitor/compare/visit_mut_span 2272142 ns/iter (± 4509) 2297176 ns/iter (± 20932) 0.99
css/visitor/compare/visit_mut_span_panic 2324591 ns/iter (± 7152) 2333117 ns/iter (± 15702) 1.00
css/visitor/compare/fold_span 3050335 ns/iter (± 20539) 3037056 ns/iter (± 15601) 1.00
css/visitor/compare/fold_span_panic 3216472 ns/iter (± 26590) 3217333 ns/iter (± 30860) 1.00
css/lexer/bootstrap_5_1_3 5227430 ns/iter (± 4595) 5179218 ns/iter (± 30062) 1.01
css/lexer/foundation_6_7_4 4364059 ns/iter (± 2140) 4358375 ns/iter (± 1938) 1.00
css/lexer/tailwind_3_1_1 829869 ns/iter (± 309) 829718 ns/iter (± 494) 1.00
css/parser/bootstrap_5_1_3 21854989 ns/iter (± 317126) 22620515 ns/iter (± 53510) 0.97
css/parser/foundation_6_7_4 17466743 ns/iter (± 140276) 18039888 ns/iter (± 48639) 0.97
css/parser/tailwind_3_1_1 3334271 ns/iter (± 3136) 3322905 ns/iter (± 8097) 1.00
es/codegen/colors 330824 ns/iter (± 185376) 331147 ns/iter (± 184782) 1.00
es/codegen/large 1175114 ns/iter (± 592174) 1206909 ns/iter (± 608945) 0.97
es/codegen/with-parser/colors 48187 ns/iter (± 533) 47997 ns/iter (± 316) 1.00
es/codegen/with-parser/large 533959 ns/iter (± 5238) 528216 ns/iter (± 1895) 1.01
es/minify/libraries/antd 1555371304 ns/iter (± 22527562) 1637533874 ns/iter (± 9540850) 0.95
es/minify/libraries/d3 272912557 ns/iter (± 8386964) 291543084 ns/iter (± 3158373) 0.94
es/minify/libraries/echarts 1206733319 ns/iter (± 14438228) 1228390397 ns/iter (± 14327199) 0.98
es/minify/libraries/jquery 84174422 ns/iter (± 2891623) 85450284 ns/iter (± 655124) 0.99
es/minify/libraries/lodash 100012799 ns/iter (± 2177516) 103901126 ns/iter (± 1267061) 0.96
es/minify/libraries/moment 47606295 ns/iter (± 1188113) 48491170 ns/iter (± 330069) 0.98
es/minify/libraries/react 17815081 ns/iter (± 343114) 18032469 ns/iter (± 197019) 0.99
es/minify/libraries/terser 227972602 ns/iter (± 8229409) 249995441 ns/iter (± 4320741) 0.91
es/minify/libraries/three 390154633 ns/iter (± 10407897) 449505076 ns/iter (± 6946060) 0.87
es/minify/libraries/typescript 2803879620 ns/iter (± 28260943) 2949361408 ns/iter (± 23615708) 0.95
es/minify/libraries/victory 648734253 ns/iter (± 12215767) 689235634 ns/iter (± 6115665) 0.94
es/minify/libraries/vue 126699179 ns/iter (± 2820716) 128384238 ns/iter (± 2370415) 0.99
es/visitor/compare/clone 2398607 ns/iter (± 15764) 2426703 ns/iter (± 27515) 0.99
es/visitor/compare/visit_mut_span 2797332 ns/iter (± 13376) 2825840 ns/iter (± 16858) 0.99
es/visitor/compare/visit_mut_span_panic 2860052 ns/iter (± 52596) 2884596 ns/iter (± 28409) 0.99
es/visitor/compare/fold_span 3984766 ns/iter (± 32545) 4123226 ns/iter (± 30645) 0.97
es/visitor/compare/fold_span_panic 4114299 ns/iter (± 29437) 4190472 ns/iter (± 53786) 0.98
es/lexer/colors 16324 ns/iter (± 42) 16322 ns/iter (± 25) 1.00
es/lexer/angular 7865266 ns/iter (± 5715) 7851917 ns/iter (± 1793) 1.00
es/lexer/backbone 1009849 ns/iter (± 954) 1011843 ns/iter (± 691) 1.00
es/lexer/jquery 5621931 ns/iter (± 3461) 5615967 ns/iter (± 3759) 1.00
es/lexer/jquery mobile 8642471 ns/iter (± 19797) 8638358 ns/iter (± 8302) 1.00
es/lexer/mootools 4432416 ns/iter (± 3248) 4439090 ns/iter (± 2364) 1.00
es/lexer/underscore 844057 ns/iter (± 298) 845688 ns/iter (± 820) 1.00
es/lexer/three 26339412 ns/iter (± 24192) 26420963 ns/iter (± 14971) 1.00
es/lexer/yui 4835987 ns/iter (± 1126) 4830922 ns/iter (± 2710) 1.00
es/parser/colors 30069 ns/iter (± 38) 30150 ns/iter (± 110) 1.00
es/parser/angular 15996557 ns/iter (± 150511) 16828087 ns/iter (± 289340) 0.95
es/parser/backbone 2320645 ns/iter (± 11438) 2318460 ns/iter (± 14230) 1.00
es/parser/jquery 12694176 ns/iter (± 136940) 12870234 ns/iter (± 189890) 0.99
es/parser/jquery mobile 20602614 ns/iter (± 539515) 20709542 ns/iter (± 207768) 0.99
es/parser/mootools 9653273 ns/iter (± 62392) 9735203 ns/iter (± 167318) 0.99
es/parser/underscore 1967245 ns/iter (± 13407) 1959498 ns/iter (± 11218) 1.00
es/parser/three 60163549 ns/iter (± 318520) 61532138 ns/iter (± 210003) 0.98
es/parser/yui 9642914 ns/iter (± 61778) 9913635 ns/iter (± 147929) 0.97
es/preset-env/usage/builtin_type 140510 ns/iter (± 31402) 140334 ns/iter (± 31360) 1.00
es/preset-env/usage/property 21098 ns/iter (± 109) 21245 ns/iter (± 84) 0.99
es/resolver/typescript 125105385 ns/iter (± 1944771) 125740581 ns/iter (± 2327154) 0.99
es/fixer/typescript 96037930 ns/iter (± 1123787) 99625298 ns/iter (± 1066540) 0.96
es/hygiene/typescript 209964463 ns/iter (± 3548449) 219518248 ns/iter (± 1427454) 0.96
es/resolver_with_hygiene/typescript 352892592 ns/iter (± 4250749) 371512638 ns/iter (± 3535832) 0.95
es/visitor/base-perf/module_clone 75779 ns/iter (± 1781) 76361 ns/iter (± 2013) 0.99
es/visitor/base-perf/fold_empty 86507 ns/iter (± 1332) 85795 ns/iter (± 1063) 1.01
es/visitor/base-perf/fold_noop_impl_all 86680 ns/iter (± 2045) 85418 ns/iter (± 1609) 1.01
es/visitor/base-perf/fold_noop_impl_vec 86965 ns/iter (± 1903) 85890 ns/iter (± 1665) 1.01
es/visitor/base-perf/boxing_boxed_clone 56 ns/iter (± 0) 57 ns/iter (± 0) 0.98
es/visitor/base-perf/boxing_unboxed_clone 59 ns/iter (± 0) 59 ns/iter (± 0) 1
es/visitor/base-perf/boxing_boxed 103 ns/iter (± 0) 103 ns/iter (± 0) 1
es/visitor/base-perf/boxing_unboxed 102 ns/iter (± 0) 103 ns/iter (± 0) 0.99
es/visitor/base-perf/visit_contains_this 3451 ns/iter (± 89) 3422 ns/iter (± 77) 1.01
es/base/parallel/resolver/typescript 5072750937 ns/iter (± 457646295) 5422421996 ns/iter (± 533306563) 0.94
es/base/parallel/hygiene/typescript 2422006922 ns/iter (± 28743698) 2452145289 ns/iter (± 15920037) 0.99
misc/visitors/time-complexity/time 5 100 ns/iter (± 0) 100 ns/iter (± 2) 1
misc/visitors/time-complexity/time 10 331 ns/iter (± 3) 338 ns/iter (± 1) 0.98
misc/visitors/time-complexity/time 15 657 ns/iter (± 0) 665 ns/iter (± 8) 0.99
misc/visitors/time-complexity/time 20 1216 ns/iter (± 0) 1215 ns/iter (± 0) 1.00
misc/visitors/time-complexity/time 40 6196 ns/iter (± 3) 6192 ns/iter (± 2) 1.00
misc/visitors/time-complexity/time 60 15571 ns/iter (± 12) 15562 ns/iter (± 1) 1.00
es/full-target/es2016 187629 ns/iter (± 797) 188560 ns/iter (± 487) 1.00
es/full-target/es2017 182432 ns/iter (± 565) 183208 ns/iter (± 526) 1.00
es/full-target/es2018 171763 ns/iter (± 532) 171859 ns/iter (± 381) 1.00
es2020_nullish_coalescing 66994 ns/iter (± 116) 67492 ns/iter (± 239) 0.99
es2020_optional_chaining 96600 ns/iter (± 1086) 96285 ns/iter (± 5859) 1.00
es2022_class_properties 94363 ns/iter (± 154) 94890 ns/iter (± 119) 0.99
es2018_object_rest_spread 71387 ns/iter (± 189) 72149 ns/iter (± 123) 0.99
es2019_optional_catch_binding 61217 ns/iter (± 79) 61805 ns/iter (± 167) 0.99
es2017_async_to_generator 61800 ns/iter (± 118) 62387 ns/iter (± 149) 0.99
es2016_exponentiation 65626 ns/iter (± 147) 66141 ns/iter (± 139) 0.99
es2015_arrow 70453 ns/iter (± 263) 71275 ns/iter (± 132) 0.99
es2015_block_scoped_fn 66353 ns/iter (± 155) 67521 ns/iter (± 195) 0.98
es2015_block_scoping 159833 ns/iter (± 6401) 139624 ns/iter (± 9121) 1.14
es2015_classes 117213 ns/iter (± 517) 117628 ns/iter (± 528) 1.00
es2015_computed_props 61166 ns/iter (± 120) 62018 ns/iter (± 146) 0.99
es2015_destructuring 117752 ns/iter (± 211) 118039 ns/iter (± 227) 1.00
es2015_duplicate_keys 63883 ns/iter (± 84) 64469 ns/iter (± 165) 0.99
es2015_parameters 79539 ns/iter (± 207) 80722 ns/iter (± 239) 0.99
es2015_fn_name 66592 ns/iter (± 397) 67946 ns/iter (± 645) 0.98
es2015_for_of 64151 ns/iter (± 67) 65254 ns/iter (± 132) 0.98
es2015_instanceof 63371 ns/iter (± 85) 64019 ns/iter (± 113) 0.99
es2015_shorthand_property 61076 ns/iter (± 67) 61564 ns/iter (± 106) 0.99
es2015_spread 60979 ns/iter (± 83) 61768 ns/iter (± 118) 0.99
es2015_sticky_regex 62213 ns/iter (± 63) 62908 ns/iter (± 160) 0.99
es2015_typeof_symbol 62437 ns/iter (± 124) 63353 ns/iter (± 109) 0.99
es/transform/baseline/base 51777 ns/iter (± 72) 52433 ns/iter (± 123) 0.99
es/transform/baseline/common_reserved_word 62554 ns/iter (± 104) 63212 ns/iter (± 96) 0.99
es/transform/baseline/common_typescript 141658 ns/iter (± 3928) 168047 ns/iter (± 1714) 0.84
es/target/es3 170788 ns/iter (± 392) 171820 ns/iter (± 212) 0.99
es/target/es2015 632648 ns/iter (± 1268) 634474 ns/iter (± 1967) 1.00
es/target/es2016 65441 ns/iter (± 109) 65999 ns/iter (± 86) 0.99
es/target/es2017 61690 ns/iter (± 103) 62444 ns/iter (± 103) 0.99
es/target/es2018 81298 ns/iter (± 121) 82038 ns/iter (± 85) 0.99
es/target/es2020 132849 ns/iter (± 252) 133455 ns/iter (± 304) 1.00
babelify-only 679250 ns/iter (± 1630) 671037 ns/iter (± 1535) 1.01
parse_and_babelify_angular 49261102 ns/iter (± 946448) 49582976 ns/iter (± 1635602) 0.99
parse_and_babelify_backbone 5826357 ns/iter (± 168108) 5948836 ns/iter (± 144351) 0.98
parse_and_babelify_jquery 36605700 ns/iter (± 1413531) 36693704 ns/iter (± 749833) 1.00
parse_and_babelify_jquery_mobile 60456303 ns/iter (± 1676943) 62258216 ns/iter (± 289232) 0.97
parse_and_babelify_mootools 37365353 ns/iter (± 1120661) 38347969 ns/iter (± 361213) 0.97
parse_and_babelify_underscore 4626119 ns/iter (± 143752) 4484115 ns/iter (± 58462) 1.03
parse_and_babelify_yui 37756159 ns/iter (± 1475286) 37653016 ns/iter (± 945563) 1.00
html/minify/document/css_spec 43199171 ns/iter (± 562376) 45601452 ns/iter (± 468308) 0.95
html/minify/document/github 17799723 ns/iter (± 78362) 18323834 ns/iter (± 68109) 0.97
html/minify/document/stackoverflow 15891529 ns/iter (± 83803) 16575737 ns/iter (± 35890) 0.96
html/minify/document_fragment/css_spec 41660647 ns/iter (± 458124) 43314479 ns/iter (± 233215) 0.96
html/minify/document_fragment/github 17095102 ns/iter (± 43411) 17253384 ns/iter (± 52771) 0.99
html/minify/document_fragment/stackoverflow 15599151 ns/iter (± 117008) 15743729 ns/iter (± 104239) 0.99
html/document/visitor/compare/clone 346603 ns/iter (± 1901) 346497 ns/iter (± 1757) 1.00
html/document/visitor/compare/visit_mut_span 372357 ns/iter (± 1867) 372838 ns/iter (± 2216) 1.00
html/document/visitor/compare/visit_mut_span_panic 382476 ns/iter (± 2151) 383156 ns/iter (± 1424) 1.00
html/document/visitor/compare/fold_span 412029 ns/iter (± 1876) 412387 ns/iter (± 1726) 1.00
html/document/visitor/compare/fold_span_panic 466522 ns/iter (± 1715) 468560 ns/iter (± 1872) 1.00
html/document_fragment/visitor/compare/clone 342587 ns/iter (± 2082) 340007 ns/iter (± 2161) 1.01
html/document_fragment/visitor/compare/visit_mut_span 369776 ns/iter (± 2483) 372055 ns/iter (± 2116) 0.99
html/document_fragment/visitor/compare/visit_mut_span_panic 377332 ns/iter (± 1944) 378863 ns/iter (± 2181) 1.00
html/document_fragment/visitor/compare/fold_span 408840 ns/iter (± 1884) 412007 ns/iter (± 2483) 0.99
html/document_fragment/visitor/compare/fold_span_panic 467560 ns/iter (± 2727) 463616 ns/iter (± 2177) 1.01
html/lexer/css_2021_spec 15661647 ns/iter (± 9749) 15546871 ns/iter (± 75200) 1.01
html/lexer/github_com_17_05_2022 6076133 ns/iter (± 4770) 6047839 ns/iter (± 3106) 1.00
html/lexer/stackoverflow_com_17_05_2022 5683758 ns/iter (± 2261) 5640584 ns/iter (± 2790) 1.01
html/parser/parser_document/css_2021_spec 26197607 ns/iter (± 268430) 27705120 ns/iter (± 79346) 0.95
html/parser/parser_document/github_com_17_05_2022 8791746 ns/iter (± 8149) 8819761 ns/iter (± 9962) 1.00
html/parser/parser_document/stackoverflow_com_17_05_2022 7731965 ns/iter (± 4954) 7746002 ns/iter (± 7273) 1.00
html/parser/parser_document_fragment/css_2021_spec 26676209 ns/iter (± 121217) 28188449 ns/iter (± 148536) 0.95
html/parser/parser_document_fragment/github_com_17_05_2022 8813583 ns/iter (± 11350) 8850264 ns/iter (± 24319) 1.00
html/parser/parser_document_fragment/stackoverflow_com_17_05_2022 7730436 ns/iter (± 7424) 7774892 ns/iter (± 8910) 0.99

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

Please sign in to comment.