fix corner case in rests (#4576)

fixes #4575
This commit is contained in:
Alex Lam S.L
2021-01-20 23:23:06 +00:00
committed by GitHub
parent bc7a88baea
commit c1e771a89a
2 changed files with 38 additions and 5 deletions

View File

@@ -7845,11 +7845,11 @@ merge(Compressor.prototype, {
if (fn.rest) { if (fn.rest) {
if (!(is_iife && compressor.option("rests"))) return; if (!(is_iife && compressor.option("rests"))) return;
var insert = fn.argnames.length; var insert = fn.argnames.length;
for (var i = args.length; i < insert; i++) { args = args.slice(0, insert);
args[i] = make_node(AST_Undefined, call).optimize(compressor); while (args.length < insert) args.push(make_node(AST_Undefined, call).optimize(compressor));
} args.push(make_node(AST_Array, call, { elements: call.args.slice(insert) }));
args[insert] = make_node(AST_Array, call, { elements: args.splice(insert) }); call.args = args;
fn.argnames.push(fn.rest); fn.argnames = fn.argnames.concat(fn.rest);
fn.rest = null; fn.rest = null;
} }
var pos = 0, last = 0; var pos = 0, last = 0;

View File

@@ -663,3 +663,36 @@ issue_4562: {
expect_stdout: "f" expect_stdout: "f"
node_version: ">=6" node_version: ">=6"
} }
issue_4575: {
options = {
collapse_vars: true,
ie8: true,
reduce_vars: true,
rests: true,
unused: true,
}
input: {
A = "PASS";
(function() {
var a = 0, b = a;
var c = function a(...b) {
A;
var d = A;
console.log(d, b.length);
}();
})();
}
expect: {
A = "PASS";
(function() {
(function(b) {
A;
var d = A;
console.log(d, b.length);
})([]);
})();
}
expect_stdout: "PASS 0"
node_version: ">=6"
}