From: Alex Lam S.L Date: Fri, 11 Dec 2020 22:45:59 +0000 (+0000) Subject: fix corner case in `spread` (#4370) X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=fd0d28e4652b8709d41031ef94594a50266f7c01;p=UglifyJS.git fix corner case in `spread` (#4370) --- diff --git a/lib/compress.js b/lib/compress.js index cc601bfb..96589686 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -10051,13 +10051,14 @@ merge(Compressor.prototype, { found = true; var exp = prop.expression; if (compressor.option("spread") && exp instanceof AST_Object && all(exp.properties, function(prop) { - return !(prop instanceof AST_ObjectGetter - || prop instanceof AST_ObjectSetter && prop.key instanceof AST_Node - || prop instanceof AST_Spread); + return !(prop instanceof AST_ObjectGetter || prop instanceof AST_Spread); })) { changed = true; exp.properties.forEach(function(prop) { - if (prop instanceof AST_ObjectKeyVal) process(prop); + process(prop instanceof AST_ObjectSetter ? make_node(AST_ObjectKeyVal, prop, { + key: prop.key, + value: make_node(AST_Undefined, prop).optimize(compressor) + }) : prop); }); } else { generated = true; diff --git a/test/compress/spread.js b/test/compress/spread.js index 78348758..41715514 100644 --- a/test/compress/spread.js +++ b/test/compress/spread.js @@ -250,6 +250,31 @@ reduce_vars_2: { node_version: ">=6" } +convert_setter: { + options = { + objects: true, + spread: true, + } + input: { + var o = { + ...{ + set PASS(v) {}, + }, + }; + for (var k in o) + console.log(k, o[k]); + } + expect: { + var o = { + PASS: void 0, + }; + for (var k in o) + console.log(k, o[k]); + } + expect_stdout: "PASS undefined" + node_version: ">=8" +} + keep_getter_1: { options = { side_effects: true, @@ -773,9 +798,7 @@ issue_4363: { } expect: { ({ - ...{ - set [console.log("PASS")](v) {}, - }, + [console.log("PASS")]: void 0, }); } expect_stdout: "PASS"