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 (!(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);
}
args[insert] = make_node(AST_Array, call, { elements: args.splice(insert) });
fn.argnames.push(fn.rest);
args = args.slice(0, insert);
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) }));
call.args = args;
fn.argnames = fn.argnames.concat(fn.rest);
fn.rest = null;
}
var pos = 0, last = 0;

View File

@@ -663,3 +663,36 @@ issue_4562: {
expect_stdout: "f"
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"
}