aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Lam S.L <alexlamsl@gmail.com>2021-01-12 01:12:30 +0000
committerGitHub <noreply@github.com>2021-01-12 09:12:30 +0800
commitc12486bab4e445144968635e16b96943ed98b8c1 (patch)
tree48e5328203affc5ffe4f130622448d86df4b70aa
parent52e94a072350b9d40ff11e8799b7550ce216cd45 (diff)
downloadtracifyjs-c12486bab4e445144968635e16b96943ed98b8c1.tar.gz
tracifyjs-c12486bab4e445144968635e16b96943ed98b8c1.zip
fix corner case in `rests` (#4539)
fixes #4538
-rw-r--r--lib/compress.js4
-rw-r--r--test/compress/rests.js19
2 files changed, 21 insertions, 2 deletions
diff --git a/lib/compress.js b/lib/compress.js
index 5526972f..e9985540 100644
--- a/lib/compress.js
+++ b/lib/compress.js
@@ -7778,8 +7778,9 @@ merge(Compressor.prototype, {
if (!all(args, function(arg) {
return !(arg instanceof AST_Spread);
})) return;
+ var is_iife = fn === exp && !fn.name;
if (fn.rest) {
- if (!compressor.option("rests")) return;
+ if (!(is_iife && compressor.option("rests"))) return;
var insert = fn.argnames.length;
for (var i = args.length; i < insert; i++) {
args[i] = make_node(AST_Undefined, call).optimize(compressor);
@@ -7789,7 +7790,6 @@ merge(Compressor.prototype, {
fn.rest = null;
}
var pos = 0, last = 0;
- var is_iife = fn === exp && !fn.name;
var drop_defaults = is_iife && compressor.option("default_values");
var drop_fargs = is_iife && compressor.drop_fargs(fn, call) ? function(argname, arg) {
if (!argname) return true;
diff --git a/test/compress/rests.js b/test/compress/rests.js
index f3c2af95..e322112c 100644
--- a/test/compress/rests.js
+++ b/test/compress/rests.js
@@ -525,3 +525,22 @@ issue_4525_2: {
expect_stdout: "PASS"
node_version: ">=6"
}
+
+issue_4538: {
+ options = {
+ rests: true,
+ unused: true,
+ }
+ input: {
+ console.log(typeof function f(...a) {
+ return a.p, f;
+ }()());
+ }
+ expect: {
+ console.log(typeof function f(...a) {
+ return a.p, f;
+ }()());
+ }
+ expect_stdout: "function"
+ node_version: ">=6"
+}