From fe647b083e0def2bf6445534c7017baed09541a9 Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Tue, 17 Oct 2017 01:18:55 +0800 Subject: [PATCH] account for side-effects from `AST_This` in `collapse_vars` (#2365) --- lib/compress.js | 6 ++-- test/compress/collapse_vars.js | 52 ++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 2 deletions(-) diff --git a/lib/compress.js b/lib/compress.js index c3876f9d..5e391aba 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -950,9 +950,11 @@ merge(Compressor.prototype, { scope = save_scope; return true; } - if (node instanceof AST_SymbolRef || node instanceof AST_PropAccess) { + if (node instanceof AST_PropAccess + || node instanceof AST_SymbolRef + || node instanceof AST_This) { var sym = get_symbol(node); - if (sym instanceof AST_SymbolRef) { + if (sym instanceof AST_SymbolRef || node instanceof AST_This) { lvalues[sym.name] = lvalues[sym.name] || is_lhs(node, tw.parent()); } } diff --git a/test/compress/collapse_vars.js b/test/compress/collapse_vars.js index 7d66f7c6..ec94e9f0 100644 --- a/test/compress/collapse_vars.js +++ b/test/compress/collapse_vars.js @@ -2600,3 +2600,55 @@ prop_side_effects_2: { "2", ] } + +issue_2364: { + options = { + collapse_vars: true, + pure_getters: true, + } + input: { + console.log(function(a) { + var b = a.f; + a.f++; + return b; + }({ f: 1 })); + console.log(function() { + var a = { f: 1 }, b = a.f; + a.f++; + return b; + }()); + console.log({ + f: 1, + g: function() { + var b = this.f; + this.f++; + return b; + } + }.g()); + } + expect: { + console.log(function(a) { + var b = a.f; + a.f++; + return b; + }({ f: 1 })); + console.log(function() { + var a = { f: 1 }, b = a.f; + a.f++; + return b; + }()); + console.log({ + f: 1, + g: function() { + var b = this.f; + this.f++; + return b; + } + }.g()); + } + expect_stdout: [ + "1", + "1", + "1", + ] +} -- 2.34.1