From: Alex Lam S.L Date: Mon, 29 Apr 2019 09:23:00 +0000 (+0800) Subject: fix corner case in `properties` (#3390) X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=c37a8e927e5fdd2276c658586003710e119293c8;p=UglifyJS.git fix corner case in `properties` (#3390) fixes #3389 --- diff --git a/lib/compress.js b/lib/compress.js index 1a1b64f9..7d9a74d3 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -6067,7 +6067,7 @@ merge(Compressor.prototype, { } } 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 fixed = self.fixed_value(); var single_use = def.single_use && !(parent instanceof AST_Call && parent.is_expr_pure(compressor)); @@ -6689,7 +6689,7 @@ merge(Compressor.prototype, { return sym; } } - if (is_lhs(self, compressor.parent())) return self; + if (is_lhs(compressor.self(), compressor.parent())) return self; if (key !== prop) { var sub = self.flatten_object(property, compressor); if (sub) { @@ -6787,7 +6787,7 @@ merge(Compressor.prototype, { 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") && self.expression instanceof AST_Dot && self.expression.property == "prototype") { diff --git a/test/compress/properties.js b/test/compress/properties.js index 3a78d626..a70ab7d8 100644 --- a/test/compress/properties.js +++ b/test/compress/properties.js @@ -1862,3 +1862,29 @@ join_expr: { } 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" +}