node.walk(scanner);
});
if (node.rest) {
+ var fixed_node;
if (save) fixed = compressor.option("rests") && function() {
var value = save();
- return value instanceof AST_Array ? make_node(AST_Array, node, {
- elements: value.elements.slice(node.elements.length),
- }) : node;
+ if (!(value instanceof AST_Array)) return node;
+ if (!fixed_node) fixed_node = make_node(AST_Array, node);
+ fixed_node.elements = value.elements.slice(node.elements.length);
+ return fixed_node;
};
node.rest.walk(scanner);
}
return arg || make_node(AST_Undefined, iife);
}, visit);
});
- var rest = fn.rest;
+ var rest = fn.rest, fixed_node;
if (rest) scan_declaration(tw, compressor, rest, compressor.option("rests") && function() {
- return fn.rest === rest ? make_node(AST_Array, fn, {
- elements: iife.args.slice(fn.argnames.length),
- }) : rest;
+ if (fn.rest !== rest) return rest;
+ if (!fixed_node) fixed_node = make_node(AST_Array, fn);
+ fixed_node.elements = iife.args.slice(fn.argnames.length);
+ return fixed_node;
}, visit);
walk_lambda(fn, tw);
var safe_ids = tw.safe_ids;
expect_stdout: "PASS"
node_version: ">=6"
}
+
+issue_5165_1: {
+ options = {
+ conditionals: true,
+ dead_code: true,
+ evaluate: true,
+ reduce_vars: true,
+ rests: true,
+ side_effects: true,
+ switches: true,
+ unsafe: true,
+ }
+ input: {
+ console.log(function([ ...a ]) {
+ switch (a) {
+ case a:
+ return "PASS";
+ }
+ }([]));
+ }
+ expect: {
+ console.log(function([ ...a ]) {
+ return "PASS";
+ }([]));
+ }
+ expect_stdout: "PASS"
+ node_version: ">=6"
+}
+
+issue_5165_2: {
+ options = {
+ conditionals: true,
+ dead_code: true,
+ evaluate: true,
+ reduce_vars: true,
+ rests: true,
+ side_effects: true,
+ switches: true,
+ unsafe: true,
+ }
+ input: {
+ console.log(function(...a) {
+ switch (a) {
+ case a:
+ return "PASS";
+ }
+ }());
+ }
+ expect: {
+ console.log("PASS");
+ }
+ expect_stdout: "PASS"
+ node_version: ">=6"
+}