enhance dead_code (#3907)
This commit is contained in:
@@ -7739,6 +7739,10 @@ merge(Compressor.prototype, {
|
|||||||
if (compressor.option("dead_code")) {
|
if (compressor.option("dead_code")) {
|
||||||
if (self.left instanceof AST_PropAccess) {
|
if (self.left instanceof AST_PropAccess) {
|
||||||
if (self.operator == "=") {
|
if (self.operator == "=") {
|
||||||
|
if (self.left.equivalent_to(self.right)
|
||||||
|
&& (self.left instanceof AST_Dot || !self.left.property.has_side_effects(compressor))) {
|
||||||
|
return self.right;
|
||||||
|
}
|
||||||
var exp = self.left.expression;
|
var exp = self.left.expression;
|
||||||
if (exp instanceof AST_Lambda
|
if (exp instanceof AST_Lambda
|
||||||
|| !compressor.has_directive("use strict")
|
|| !compressor.has_directive("use strict")
|
||||||
@@ -7751,6 +7755,7 @@ merge(Compressor.prototype, {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (self.left instanceof AST_SymbolRef) {
|
} else if (self.left instanceof AST_SymbolRef) {
|
||||||
|
if (self.operator == "=" && self.left.equivalent_to(self.right)) return self.right;
|
||||||
if (self.left.is_immutable()) return strip_assignment();
|
if (self.left.is_immutable()) return strip_assignment();
|
||||||
var def = self.left.definition();
|
var def = self.left.definition();
|
||||||
var scope = def.scope.resolve();
|
var scope = def.scope.resolve();
|
||||||
|
|||||||
@@ -1168,3 +1168,28 @@ redundant_assignments: {
|
|||||||
}
|
}
|
||||||
expect_stdout: "PASS PASS"
|
expect_stdout: "PASS PASS"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
self_assignments: {
|
||||||
|
options = {
|
||||||
|
dead_code: true,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
var a = "PASS", b = 0, l = [ "FAIL", "PASS" ], o = { p: "PASS" };
|
||||||
|
a = a;
|
||||||
|
l[0] = l[0];
|
||||||
|
l[b] = l[b];
|
||||||
|
l[b++] = l[b++];
|
||||||
|
o.p = o.p;
|
||||||
|
console.log(a, b, l[0], o.p);
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
var a = "PASS", b = 0, l = [ "FAIL", "PASS" ], o = { p: "PASS" };
|
||||||
|
a;
|
||||||
|
l[0];
|
||||||
|
l[b];
|
||||||
|
l[b++] = l[b++];
|
||||||
|
o.p;
|
||||||
|
console.log(a, b, l[0], o.p);
|
||||||
|
}
|
||||||
|
expect_stdout: "PASS 2 PASS PASS"
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user