avoid duplicate property names in object literals under "use strict" (#2818)

fixes #2816
This commit is contained in:
Alex Lam S.L
2018-01-19 20:13:50 +08:00
committed by GitHub
parent ac9a168fba
commit e21bab7ce6
2 changed files with 36 additions and 3 deletions

View File

@@ -893,7 +893,7 @@ merge(Compressor.prototype, {
sequencesize_2(statements, compressor);
}
if (compressor.option("join_vars")) {
join_consecutive_vars(statements, compressor);
join_consecutive_vars(statements);
}
if (compressor.option("collapse_vars")) {
collapse(statements, compressor);
@@ -1746,8 +1746,14 @@ merge(Compressor.prototype, {
prop = prop.evaluate(compressor);
}
if (prop instanceof AST_Node) break;
prop = "" + prop;
if (compressor.has_directive("use strict")) {
if (!all(def.value.properties, function(node) {
return node.key != prop && node.key.name != prop;
})) break;
}
def.value.properties.push(make_node(AST_ObjectKeyVal, node, {
key: "" + prop,
key: prop,
value: node.right
}));
exprs.shift();
@@ -1756,7 +1762,7 @@ merge(Compressor.prototype, {
return trimmed && exprs;
}
function join_consecutive_vars(statements, compressor) {
function join_consecutive_vars(statements) {
var defs;
for (var i = 0, j = -1, len = statements.length; i < len; i++) {
var stat = statements[i];