fix corner case in properties (#3390)

fixes #3389
This commit is contained in:
Alex Lam S.L
2019-04-29 17:23:00 +08:00
committed by GitHub
parent 413bbe0480
commit c37a8e927e
2 changed files with 29 additions and 3 deletions

View File

@@ -6067,7 +6067,7 @@ merge(Compressor.prototype, {
} }
} }
var parent = compressor.parent(); var parent = compressor.parent();
if (compressor.option("reduce_vars") && is_lhs(self, parent) !== self) { if (compressor.option("reduce_vars") && is_lhs(compressor.self(), parent) !== compressor.self()) {
var def = self.definition(); var def = self.definition();
var fixed = self.fixed_value(); var fixed = self.fixed_value();
var single_use = def.single_use && !(parent instanceof AST_Call && parent.is_expr_pure(compressor)); var single_use = def.single_use && !(parent instanceof AST_Call && parent.is_expr_pure(compressor));
@@ -6689,7 +6689,7 @@ merge(Compressor.prototype, {
return sym; return sym;
} }
} }
if (is_lhs(self, compressor.parent())) return self; if (is_lhs(compressor.self(), compressor.parent())) return self;
if (key !== prop) { if (key !== prop) {
var sub = self.flatten_object(property, compressor); var sub = self.flatten_object(property, compressor);
if (sub) { if (sub) {
@@ -6787,7 +6787,7 @@ merge(Compressor.prototype, {
col: self.start.col col: self.start.col
}); });
} }
if (is_lhs(self, compressor.parent())) return self; if (is_lhs(compressor.self(), compressor.parent())) return self;
if (compressor.option("unsafe_proto") if (compressor.option("unsafe_proto")
&& self.expression instanceof AST_Dot && self.expression instanceof AST_Dot
&& self.expression.property == "prototype") { && self.expression.property == "prototype") {

View File

@@ -1862,3 +1862,29 @@ join_expr: {
} }
expect_stdout: "PASS" expect_stdout: "PASS"
} }
issue_3389: {
options = {
evaluate: true,
properties: true,
reduce_vars: true,
unsafe: true,
}
input: {
(function() {
var a = "PASS";
if (delete b)
b = a[null] = 42;
console.log(a);
})();
}
expect: {
(function() {
var a = "PASS";
if (delete b)
b = a.null = 42;
console.log(a);
})();
}
expect_stdout: "PASS"
}