diff options
author | Alex Lam S.L <alexlamsl@gmail.com> | 2020-05-21 22:26:46 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-22 05:26:46 +0800 |
commit | fa14a9cfcd8d766887654b8b6da727489077033a (patch) | |
tree | 3a005ef558599710efffcd59eaca449468dd42e4 | |
parent | aeb9ea5ac22fe37d0a74bb8cacd6edfa1ae9ef8c (diff) | |
download | tracifyjs-fa14a9cfcd8d766887654b8b6da727489077033a.tar.gz tracifyjs-fa14a9cfcd8d766887654b8b6da727489077033a.zip |
fix corner case in `join_vars` (#3917)
fixes #3916
-rw-r--r-- | lib/compress.js | 2 | ||||
-rw-r--r-- | test/compress/join_vars.js | 32 |
2 files changed, 33 insertions, 1 deletions
diff --git a/lib/compress.js b/lib/compress.js index 06d04cc5..17eeb87c 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -2508,7 +2508,7 @@ merge(Compressor.prototype, { } if (prop instanceof AST_Node) break; prop = "" + prop; - var diff = compressor.has_directive("use strict") ? function(node) { + var diff = prop == "__proto__" || compressor.has_directive("use strict") ? function(node) { return node.key != prop && node.key.name != prop; } : function(node) { return node.key.name != prop; diff --git a/test/compress/join_vars.js b/test/compress/join_vars.js index 67d7fd05..590f9970 100644 --- a/test/compress/join_vars.js +++ b/test/compress/join_vars.js @@ -1023,3 +1023,35 @@ issue_3856: { } expect_stdout: "undefined" } + +issue_3916: { + options = { + join_vars: true, + } + input: { + var o = {}; + o.p = "PASS"; + o.__proto__ = 42; + o.q = "FAIL"; + o.__proto__ = { + p: "FAIL", + q: "PASS", + }; + o.__proto__ = "foo"; + console.log(typeof o.__proto__, o.p, delete o.q, o.q); + } + expect: { + var o = { + p: "PASS", + __proto__: 42, + q: "FAIL", + }; + o.__proto__ = { + p: "FAIL", + q: "PASS", + }; + o.__proto__ = "foo"; + console.log(typeof o.__proto__, o.p, delete o.q, o.q); + } + expect_stdout: "object PASS true PASS" +} |