From 730ded2a26f63f0069dea0d3bc207bb31f344444 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Thu, 4 Apr 2024 15:24:31 +0900 Subject: [PATCH] fix(es/minifier): Abort fn inliner if there's a spread arg (#8809) **Description:** **Related issue:** - Closes #8806 --- .../src/compress/optimize/iife.rs | 4 ++ .../tests/fixture/issues/8806/config.json | 48 +++++++++++++++++++ .../tests/fixture/issues/8806/input.js | 8 ++++ .../tests/fixture/issues/8806/output.js | 9 ++++ 4 files changed, 69 insertions(+) create mode 100644 crates/swc_ecma_minifier/tests/fixture/issues/8806/config.json create mode 100644 crates/swc_ecma_minifier/tests/fixture/issues/8806/input.js create mode 100644 crates/swc_ecma_minifier/tests/fixture/issues/8806/output.js diff --git a/crates/swc_ecma_minifier/src/compress/optimize/iife.rs b/crates/swc_ecma_minifier/src/compress/optimize/iife.rs index 702952b45828..6d8200c5d52f 100644 --- a/crates/swc_ecma_minifier/src/compress/optimize/iife.rs +++ b/crates/swc_ecma_minifier/src/compress/optimize/iife.rs @@ -835,6 +835,10 @@ impl Optimizer<'_> { return None; } + if args.iter().any(|arg| arg.spread.is_some()) { + return None; + } + if self.vars.inline_with_multi_replacer(body) { self.changed = true; } diff --git a/crates/swc_ecma_minifier/tests/fixture/issues/8806/config.json b/crates/swc_ecma_minifier/tests/fixture/issues/8806/config.json new file mode 100644 index 000000000000..91c951a76c9d --- /dev/null +++ b/crates/swc_ecma_minifier/tests/fixture/issues/8806/config.json @@ -0,0 +1,48 @@ +{ + "defaults": true, + "arguments": false, + "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, + "passes": 2 +} diff --git a/crates/swc_ecma_minifier/tests/fixture/issues/8806/input.js b/crates/swc_ecma_minifier/tests/fixture/issues/8806/input.js new file mode 100644 index 000000000000..0c78cf9a8e46 --- /dev/null +++ b/crates/swc_ecma_minifier/tests/fixture/issues/8806/input.js @@ -0,0 +1,8 @@ + +function logTheNine() { + ((theThree, theNine) => { + console.log(theNine) + })(...[3, 9]); +} + +logTheNine(); diff --git a/crates/swc_ecma_minifier/tests/fixture/issues/8806/output.js b/crates/swc_ecma_minifier/tests/fixture/issues/8806/output.js new file mode 100644 index 000000000000..40a257d077fa --- /dev/null +++ b/crates/swc_ecma_minifier/tests/fixture/issues/8806/output.js @@ -0,0 +1,9 @@ +function logTheNine() { + ((theThree, theNine)=>{ + console.log(theNine); + })(...[ + 3, + 9 + ]); +} +logTheNine();