From 39a907bde3161f74e298a7fc8502fb0f6a05eaed Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Tue, 20 Feb 2018 17:38:40 +0800 Subject: [PATCH] workaround `pure_getters=true` when dropping unused assignments (#2939) fixes #2938 --- lib/compress.js | 8 +++--- test/compress/pure_getters.js | 51 +++++++++++++++++++++++++++++++++++ test/mocha/release.js | 2 +- 3 files changed, 57 insertions(+), 4 deletions(-) diff --git a/lib/compress.js b/lib/compress.js index d1c21c78..4f17ce33 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -3028,9 +3028,11 @@ merge(Compressor.prototype, { } else if (node instanceof AST_Unary && node.write_only) { sym = node.expression; } - while (sym instanceof AST_PropAccess && !sym.expression.may_throw_on_access(compressor)) { - if (sym instanceof AST_Sub) props.unshift(sym.property); - sym = sym.expression; + if (/strict/.test(compressor.option("pure_getters"))) { + while (sym instanceof AST_PropAccess && !sym.expression.may_throw_on_access(compressor)) { + if (sym instanceof AST_Sub) props.unshift(sym.property); + sym = sym.expression; + } } return sym; }; diff --git a/test/compress/pure_getters.js b/test/compress/pure_getters.js index 4e9ae4f4..82229d4b 100644 --- a/test/compress/pure_getters.js +++ b/test/compress/pure_getters.js @@ -721,3 +721,54 @@ issue_2838: { } expect_stdout: "PASS" } + +issue_2938_1: { + options = { + pure_getters: true, + unused: true, + } + input: { + function f(a) { + a.b = "PASS"; + } + var o = {}; + f(o); + console.log(o.b); + } + expect: { + function f(a) { + a.b = "PASS"; + } + var o = {}; + f(o); + console.log(o.b); + } + expect_stdout: "PASS" +} + +issue_2938_2: { + options = { + pure_getters: true, + toplevel: true, + unused: true, + } + input: { + var Parser = function Parser() {}; + var p = Parser.prototype; + p.initialContext = function initialContext() { + console.log("PASS"); + }; + p.braceIsBlock = function() {}; + (new Parser).initialContext(); + } + expect: { + var Parser = function() {}; + var p = Parser.prototype; + p.initialContext = function() { + console.log("PASS"); + }; + p.braceIsBlock = function() {}; + (new Parser).initialContext(); + } + expect_stdout: "PASS" +} diff --git a/test/mocha/release.js b/test/mocha/release.js index 656ade8d..063d0fc7 100644 --- a/test/mocha/release.js +++ b/test/mocha/release.js @@ -38,7 +38,7 @@ describe("test/jetstream.js", function() { this.timeout(20 * 60 * 1000); [ "-mc", - "-mc keep_fargs=false,passes=3,unsafe,unsafe_comps,unsafe_math,unsafe_proto", + "-mc keep_fargs=false,passes=3,pure_getters,unsafe,unsafe_comps,unsafe_math,unsafe_proto", ].forEach(function(options) { it("Should pass with options " + options, function(done) { var args = options.split(/ /); -- 2.34.1