fix corner case in spread (#4370)
This commit is contained in:
@@ -10051,13 +10051,14 @@ merge(Compressor.prototype, {
|
|||||||
found = true;
|
found = true;
|
||||||
var exp = prop.expression;
|
var exp = prop.expression;
|
||||||
if (compressor.option("spread") && exp instanceof AST_Object && all(exp.properties, function(prop) {
|
if (compressor.option("spread") && exp instanceof AST_Object && all(exp.properties, function(prop) {
|
||||||
return !(prop instanceof AST_ObjectGetter
|
return !(prop instanceof AST_ObjectGetter || prop instanceof AST_Spread);
|
||||||
|| prop instanceof AST_ObjectSetter && prop.key instanceof AST_Node
|
|
||||||
|| prop instanceof AST_Spread);
|
|
||||||
})) {
|
})) {
|
||||||
changed = true;
|
changed = true;
|
||||||
exp.properties.forEach(function(prop) {
|
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 {
|
} else {
|
||||||
generated = true;
|
generated = true;
|
||||||
|
|||||||
@@ -250,6 +250,31 @@ reduce_vars_2: {
|
|||||||
node_version: ">=6"
|
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: {
|
keep_getter_1: {
|
||||||
options = {
|
options = {
|
||||||
side_effects: true,
|
side_effects: true,
|
||||||
@@ -773,9 +798,7 @@ issue_4363: {
|
|||||||
}
|
}
|
||||||
expect: {
|
expect: {
|
||||||
({
|
({
|
||||||
...{
|
[console.log("PASS")]: void 0,
|
||||||
set [console.log("PASS")](v) {},
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
expect_stdout: "PASS"
|
expect_stdout: "PASS"
|
||||||
|
|||||||
Reference in New Issue
Block a user