fix corner case in dead_code (#3991)
This commit is contained in:
@@ -7865,12 +7865,10 @@ merge(Compressor.prototype, {
|
|||||||
if (self.left instanceof AST_PropAccess) {
|
if (self.left instanceof AST_PropAccess) {
|
||||||
if (self.operator == "=") {
|
if (self.operator == "=") {
|
||||||
if (self.__drop) {
|
if (self.__drop) {
|
||||||
var props = [];
|
var exprs = [ self.left.expression ];
|
||||||
flatten(self.left, props);
|
if (self.left instanceof AST_Sub) exprs.push(self.left.property);
|
||||||
flatten(self.right, props);
|
exprs.push(self.right);
|
||||||
return props.length == 0 ? make_node(AST_Number, self, {
|
return make_sequence(self, exprs).optimize(compressor);
|
||||||
value: 0
|
|
||||||
}) : make_sequence(self, props).optimize(compressor);
|
|
||||||
}
|
}
|
||||||
if (self.left.equivalent_to(self.right) && !self.left.has_side_effects(compressor)) {
|
if (self.left.equivalent_to(self.right) && !self.left.has_side_effects(compressor)) {
|
||||||
return self.right;
|
return self.right;
|
||||||
@@ -7962,11 +7960,6 @@ merge(Compressor.prototype, {
|
|||||||
}
|
}
|
||||||
return try_evaluate(compressor, self);
|
return try_evaluate(compressor, self);
|
||||||
|
|
||||||
function flatten(node, props) {
|
|
||||||
if (!(node.expression instanceof AST_SymbolRef)) props.push(node.expression);
|
|
||||||
if (node instanceof AST_Sub) props.push(node.property);
|
|
||||||
}
|
|
||||||
|
|
||||||
function in_try(level, node) {
|
function in_try(level, node) {
|
||||||
var right = self.right;
|
var right = self.right;
|
||||||
self.right = make_node(AST_Null, right);
|
self.right = make_node(AST_Null, right);
|
||||||
|
|||||||
@@ -1290,12 +1290,37 @@ self_assignments_5: {
|
|||||||
}
|
}
|
||||||
expect: {
|
expect: {
|
||||||
var i = 0, l = [ "FAIL", "PASS" ];
|
var i = 0, l = [ "FAIL", "PASS" ];
|
||||||
|
l[0];
|
||||||
|
l[0];
|
||||||
l[0] = l[1];
|
l[0] = l[1];
|
||||||
console.log(l[0], 2);
|
console.log(l[0], 2);
|
||||||
}
|
}
|
||||||
expect_stdout: "PASS 2"
|
expect_stdout: "PASS 2"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
self_assignments_6: {
|
||||||
|
options = {
|
||||||
|
dead_code: true,
|
||||||
|
pure_getters: "strict",
|
||||||
|
reduce_vars: true,
|
||||||
|
side_effects: true,
|
||||||
|
toplevel: true,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
var o = {
|
||||||
|
p: "PASS",
|
||||||
|
};
|
||||||
|
console.log(o.p = o.p);
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
var o = {
|
||||||
|
p: "PASS",
|
||||||
|
};
|
||||||
|
console.log(o.p);
|
||||||
|
}
|
||||||
|
expect_stdout: "PASS"
|
||||||
|
}
|
||||||
|
|
||||||
issue_3967: {
|
issue_3967: {
|
||||||
options = {
|
options = {
|
||||||
dead_code: true,
|
dead_code: true,
|
||||||
|
|||||||
Reference in New Issue
Block a user