Skip to content

Commit

Permalink
fix(es/minifier): Fix a inliner bug related to Script (#7288)
Browse files Browse the repository at this point in the history
**Related issue:**

 - Closes #7287.
  • Loading branch information
kdy1 committed Apr 19, 2023
1 parent b68466c commit 0aab90c
Show file tree
Hide file tree
Showing 6 changed files with 100 additions and 0 deletions.
65 changes: 65 additions & 0 deletions crates/swc/tests/fixture/issues-7xxx/7287/1/input/.swcrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
{
"jsc": {
"parser": {
"syntax": "typescript",
"decorators": true
},
"minify": {
"compress": {
"arguments": false,
"arrows": true,
"booleans": true,
"booleans_as_integers": false,
"collapse_vars": true,
"comparisons": true,
"computed_props": true,
"conditionals": true,
"dead_code": false,
"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
},
"mangle": false,
"module": true
},
"externalHelpers": true,
"target": "es2022"
},
"minify": true,
"isModule": false,
"module": {
"type": "commonjs"
},
}
10 changes: 10 additions & 0 deletions crates/swc/tests/fixture/issues-7xxx/7287/1/input/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
(function () {

const r = f();
console.log(r)

function f() {
console.log("REQUIRE")
return 1
}
})();
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
!function(){let r=(console.log("REQUIRE"),1);console.log(r)}();
10 changes: 10 additions & 0 deletions crates/swc_ecma_minifier/src/compress/optimize/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2218,6 +2218,16 @@ where
}
}

fn visit_mut_script(&mut self, s: &mut Script) {
s.visit_mut_children_with(self);

if self.vars.inline_with_multi_replacer(s) {
self.changed = true;
}

drop_invalid_stmts(&mut s.body);
}

fn visit_mut_module_items(&mut self, stmts: &mut Vec<ModuleItem>) {
let ctx = Ctx {
top_level: true,
Expand Down
10 changes: 10 additions & 0 deletions crates/swc_ecma_minifier/tests/fixture/issues/7287/1/input.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
(function () {

const r = f();
console.log(r)

function f() {
console.log("REQUIRE")
return 1
}
})();
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
!function() {
const r = (console.log("REQUIRE"), 1);
console.log(r);
}();

1 comment on commit 0aab90c

@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: 0aab90c Previous: bc83cb2 Ratio
es/full/bugs-1 302479 ns/iter (± 14755) 305923 ns/iter (± 10539) 0.99
es/full/minify/libraries/antd 1548612134 ns/iter (± 22251432) 1594556170 ns/iter (± 17244083) 0.97
es/full/minify/libraries/d3 299588138 ns/iter (± 7522816) 308361207 ns/iter (± 6821820) 0.97
es/full/minify/libraries/echarts 1201862126 ns/iter (± 15601839) 1241817270 ns/iter (± 6340803) 0.97
es/full/minify/libraries/jquery 92003507 ns/iter (± 1160064) 91795933 ns/iter (± 1086863) 1.00
es/full/minify/libraries/lodash 105868291 ns/iter (± 3631710) 107243989 ns/iter (± 1214395) 0.99
es/full/minify/libraries/moment 52994219 ns/iter (± 667686) 52875094 ns/iter (± 1699534) 1.00
es/full/minify/libraries/react 19332333 ns/iter (± 163678) 19415332 ns/iter (± 207006) 1.00
es/full/minify/libraries/terser 244591463 ns/iter (± 2786445) 251060746 ns/iter (± 3175189) 0.97
es/full/minify/libraries/three 434121736 ns/iter (± 7341660) 446277568 ns/iter (± 3636176) 0.97
es/full/minify/libraries/typescript 2948775204 ns/iter (± 17079510) 2962101850 ns/iter (± 17045385) 1.00
es/full/minify/libraries/victory 663553587 ns/iter (± 15762915) 677109440 ns/iter (± 13254040) 0.98
es/full/minify/libraries/vue 130068624 ns/iter (± 1901484) 130600191 ns/iter (± 1128164) 1.00
es/full/codegen/es3 28867 ns/iter (± 64) 28818 ns/iter (± 68) 1.00
es/full/codegen/es5 29033 ns/iter (± 57) 28915 ns/iter (± 138) 1.00
es/full/codegen/es2015 28993 ns/iter (± 63) 28792 ns/iter (± 122) 1.01
es/full/codegen/es2016 29001 ns/iter (± 84) 28732 ns/iter (± 127) 1.01
es/full/codegen/es2017 29191 ns/iter (± 32) 28728 ns/iter (± 125) 1.02
es/full/codegen/es2018 28982 ns/iter (± 70) 28769 ns/iter (± 82) 1.01
es/full/codegen/es2019 28962 ns/iter (± 54) 28746 ns/iter (± 108) 1.01
es/full/codegen/es2020 28988 ns/iter (± 52) 28870 ns/iter (± 74) 1.00
es/full/all/es3 182661920 ns/iter (± 2014173) 179191275 ns/iter (± 2958626) 1.02
es/full/all/es5 176648507 ns/iter (± 4130359) 172861474 ns/iter (± 1701904) 1.02
es/full/all/es2015 135757759 ns/iter (± 2387249) 132066660 ns/iter (± 3024307) 1.03
es/full/all/es2016 135020849 ns/iter (± 1828659) 130033869 ns/iter (± 1939361) 1.04
es/full/all/es2017 132889460 ns/iter (± 2210943) 128947619 ns/iter (± 1427862) 1.03
es/full/all/es2018 128237520 ns/iter (± 1859557) 124818492 ns/iter (± 2637750) 1.03
es/full/all/es2019 126349728 ns/iter (± 1418462) 122614756 ns/iter (± 1930317) 1.03
es/full/all/es2020 119281890 ns/iter (± 1526466) 117882632 ns/iter (± 1351052) 1.01
es/full/parser 522073 ns/iter (± 7312) 515660 ns/iter (± 8623) 1.01
es/full/base/fixer 22473 ns/iter (± 32) 22481 ns/iter (± 93) 1.00
es/full/base/resolver_and_hygiene 84523 ns/iter (± 71) 84067 ns/iter (± 169) 1.01
serialization of serde 121 ns/iter (± 0) 120 ns/iter (± 0) 1.01
css/minify/libraries/bootstrap 27448635 ns/iter (± 69547) 27918683 ns/iter (± 239230) 0.98
css/visitor/compare/clone 2145712 ns/iter (± 24980) 2141554 ns/iter (± 13059) 1.00
css/visitor/compare/visit_mut_span 2333349 ns/iter (± 3081) 2307330 ns/iter (± 7457) 1.01
css/visitor/compare/visit_mut_span_panic 2398122 ns/iter (± 3473) 2356372 ns/iter (± 7393) 1.02
css/visitor/compare/fold_span 3111027 ns/iter (± 15454) 3097604 ns/iter (± 12596) 1.00
css/visitor/compare/fold_span_panic 3272935 ns/iter (± 12265) 3250161 ns/iter (± 13745) 1.01
css/lexer/bootstrap_5_1_3 5131933 ns/iter (± 17688) 5116744 ns/iter (± 15043) 1.00
css/lexer/foundation_6_7_4 4318702 ns/iter (± 2448) 4290143 ns/iter (± 15174) 1.01
css/lexer/tailwind_3_1_1 821554 ns/iter (± 691) 816405 ns/iter (± 2478) 1.01
css/parser/bootstrap_5_1_3 21017634 ns/iter (± 142189) 21109342 ns/iter (± 327193) 1.00
css/parser/foundation_6_7_4 16720187 ns/iter (± 46791) 16710439 ns/iter (± 97899) 1.00
css/parser/tailwind_3_1_1 3219837 ns/iter (± 4309) 3210737 ns/iter (± 6646) 1.00
es/codegen/colors 327716 ns/iter (± 186089) 325579 ns/iter (± 184977) 1.01
es/codegen/large 1237329 ns/iter (± 648162) 1234409 ns/iter (± 635983) 1.00
es/codegen/with-parser/colors 48627 ns/iter (± 197) 47878 ns/iter (± 380) 1.02
es/codegen/with-parser/large 517056 ns/iter (± 1377) 509613 ns/iter (± 2806) 1.01
es/minify/libraries/antd 1373393060 ns/iter (± 24161144) 1383153219 ns/iter (± 17804349) 0.99
es/minify/libraries/d3 253862848 ns/iter (± 4290063) 257111153 ns/iter (± 2740840) 0.99
es/minify/libraries/echarts 1038953369 ns/iter (± 8575144) 1044637523 ns/iter (± 6395258) 0.99
es/minify/libraries/jquery 79167953 ns/iter (± 863285) 79472717 ns/iter (± 519565) 1.00
es/minify/libraries/lodash 94133239 ns/iter (± 1146089) 95591314 ns/iter (± 1216178) 0.98
es/minify/libraries/moment 45706761 ns/iter (± 625971) 45480912 ns/iter (± 258310) 1.00
es/minify/libraries/react 17038374 ns/iter (± 158737) 17231128 ns/iter (± 192473) 0.99
es/minify/libraries/terser 205913679 ns/iter (± 2173387) 211830477 ns/iter (± 2968140) 0.97
es/minify/libraries/three 362527637 ns/iter (± 5111781) 366984737 ns/iter (± 5175658) 0.99
es/minify/libraries/typescript 2456746573 ns/iter (± 12527556) 2507336166 ns/iter (± 14957454) 0.98
es/minify/libraries/victory 549321403 ns/iter (± 8541856) 562668664 ns/iter (± 9742946) 0.98
es/minify/libraries/vue 114738039 ns/iter (± 1764972) 116459334 ns/iter (± 1760226) 0.99
es/visitor/compare/clone 2341359 ns/iter (± 4878) 2321483 ns/iter (± 12752) 1.01
es/visitor/compare/visit_mut_span 2697441 ns/iter (± 2220) 2685923 ns/iter (± 7510) 1.00
es/visitor/compare/visit_mut_span_panic 2741950 ns/iter (± 4557) 2738414 ns/iter (± 7774) 1.00
es/visitor/compare/fold_span 3812626 ns/iter (± 15010) 3771384 ns/iter (± 11457) 1.01
es/visitor/compare/fold_span_panic 3951779 ns/iter (± 9194) 3913371 ns/iter (± 17000) 1.01
es/lexer/colors 13129 ns/iter (± 11) 13072 ns/iter (± 39) 1.00
es/lexer/angular 6397504 ns/iter (± 4249) 6378413 ns/iter (± 16514) 1.00
es/lexer/backbone 781917 ns/iter (± 954) 772670 ns/iter (± 973) 1.01
es/lexer/jquery 4387421 ns/iter (± 4029) 4369658 ns/iter (± 11778) 1.00
es/lexer/jquery mobile 6841721 ns/iter (± 4164) 6788898 ns/iter (± 18268) 1.01
es/lexer/mootools 3473139 ns/iter (± 2256) 3436085 ns/iter (± 11712) 1.01
es/lexer/underscore 647874 ns/iter (± 575) 640127 ns/iter (± 1341) 1.01
es/lexer/three 21040868 ns/iter (± 23881) 20753290 ns/iter (± 42594) 1.01
es/lexer/yui 3857794 ns/iter (± 3150) 3851750 ns/iter (± 8397) 1.00
es/parser/colors 28831 ns/iter (± 45) 28707 ns/iter (± 152) 1.00
es/parser/angular 15139028 ns/iter (± 173927) 15269146 ns/iter (± 115156) 0.99
es/parser/backbone 2158047 ns/iter (± 14310) 2140333 ns/iter (± 15306) 1.01
es/parser/jquery 11756459 ns/iter (± 107638) 11678174 ns/iter (± 155922) 1.01
es/parser/jquery mobile 18394837 ns/iter (± 295264) 18778219 ns/iter (± 394025) 0.98
es/parser/mootools 8949014 ns/iter (± 34923) 8892092 ns/iter (± 33057) 1.01
es/parser/underscore 1828475 ns/iter (± 10835) 1810918 ns/iter (± 10359) 1.01
es/parser/three 53277712 ns/iter (± 487400) 53887718 ns/iter (± 349459) 0.99
es/parser/yui 9043502 ns/iter (± 38267) 8985670 ns/iter (± 61952) 1.01
es/preset-env/usage/builtin_type 140107 ns/iter (± 33799) 141658 ns/iter (± 34712) 0.99
es/preset-env/usage/property 20006 ns/iter (± 65) 19372 ns/iter (± 98) 1.03
es/resolver/typescript 111387375 ns/iter (± 1872512) 112414444 ns/iter (± 2603746) 0.99
es/fixer/typescript 77580612 ns/iter (± 436247) 78612236 ns/iter (± 956190) 0.99
es/hygiene/typescript 164231701 ns/iter (± 1288329) 167101095 ns/iter (± 1512746) 0.98
es/resolver_with_hygiene/typescript 295851550 ns/iter (± 951400) 299742358 ns/iter (± 980402) 0.99
es/visitor/base-perf/module_clone 81109 ns/iter (± 520) 80618 ns/iter (± 286) 1.01
es/visitor/base-perf/fold_empty 90895 ns/iter (± 356) 90137 ns/iter (± 286) 1.01
es/visitor/base-perf/fold_noop_impl_all 90827 ns/iter (± 442) 90559 ns/iter (± 274) 1.00
es/visitor/base-perf/fold_noop_impl_vec 90493 ns/iter (± 446) 90374 ns/iter (± 705) 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 104 ns/iter (± 0) 103 ns/iter (± 0) 1.01
es/visitor/base-perf/boxing_unboxed 78 ns/iter (± 0) 79 ns/iter (± 0) 0.99
es/visitor/base-perf/visit_contains_this 3493 ns/iter (± 77) 3526 ns/iter (± 68) 0.99
es/base/parallel/resolver/typescript 5916789593 ns/iter (± 387517634) 5801861021 ns/iter (± 474047572) 1.02
es/base/parallel/hygiene/typescript 1991473182 ns/iter (± 39979242) 1995093544 ns/iter (± 24916990) 1.00
misc/visitors/time-complexity/time 5 99 ns/iter (± 0) 98 ns/iter (± 0) 1.01
misc/visitors/time-complexity/time 10 353 ns/iter (± 0) 354 ns/iter (± 1) 1.00
misc/visitors/time-complexity/time 15 673 ns/iter (± 5) 664 ns/iter (± 4) 1.01
misc/visitors/time-complexity/time 20 1224 ns/iter (± 8) 1223 ns/iter (± 8) 1.00
misc/visitors/time-complexity/time 40 6203 ns/iter (± 3) 6180 ns/iter (± 13) 1.00
misc/visitors/time-complexity/time 60 15580 ns/iter (± 6) 15580 ns/iter (± 67) 1
es/full-target/es2016 254203 ns/iter (± 610) 252549 ns/iter (± 441) 1.01
es/full-target/es2017 246901 ns/iter (± 295) 245584 ns/iter (± 443) 1.01
es/full-target/es2018 235668 ns/iter (± 378) 234751 ns/iter (± 1723) 1.00
es2020_nullish_coalescing 92664 ns/iter (± 365) 92196 ns/iter (± 510) 1.01
es2020_optional_chaining 124486 ns/iter (± 269) 124177 ns/iter (± 319) 1.00
es2022_class_properties 149647 ns/iter (± 288) 148625 ns/iter (± 291) 1.01
es2018_object_rest_spread 95973 ns/iter (± 205) 95332 ns/iter (± 326) 1.01
es2019_optional_catch_binding 85347 ns/iter (± 169) 85109 ns/iter (± 271) 1.00
es2017_async_to_generator 86343 ns/iter (± 206) 85577 ns/iter (± 885) 1.01
es2016_exponentiation 90685 ns/iter (± 191) 89836 ns/iter (± 399) 1.01
es2015_arrow 94388 ns/iter (± 219) 93558 ns/iter (± 155) 1.01
es2015_block_scoped_fn 90529 ns/iter (± 223) 91374 ns/iter (± 369) 0.99
es2015_block_scoping 167303 ns/iter (± 345) 169744 ns/iter (± 458) 0.99

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

Please sign in to comment.