From 06b9894c1970da69376296f97e853a465587292e Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Fri, 30 Mar 2018 15:07:36 +0900 Subject: [PATCH] handle modifications to `this` correctly (#3036) fixes #3032 --- lib/compress.js | 1 + test/compress/collapse_vars.js | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/lib/compress.js b/lib/compress.js index 03ed9e8a..52a23ee4 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -1052,6 +1052,7 @@ merge(Compressor.prototype, { && (side_effects || node.expression.may_throw_on_access(compressor)) || node instanceof AST_SymbolRef && (symbol_in_lvalues(node) || side_effects && may_modify(node)) + || node instanceof AST_This && symbol_in_lvalues(node) || node instanceof AST_VarDef && node.value && (node.name.name in lvalues || side_effects && may_modify(node.name)) || (sym = is_lhs(node.left, node)) diff --git a/test/compress/collapse_vars.js b/test/compress/collapse_vars.js index 886a7564..e97f1031 100644 --- a/test/compress/collapse_vars.js +++ b/test/compress/collapse_vars.js @@ -5303,3 +5303,27 @@ issue_2974: { } expect_stdout: "1" } + +issue_3032: { + options = { + collapse_vars: true, + pure_getters: true, + } + input: { + console.log({ + f: function() { + this.a = 42; + return [ this.a, !1 ]; + } + }.f()[0]); + } + expect: { + console.log({ + f: function() { + this.a = 42; + return [ this.a, !1 ]; + } + }.f()[0]); + } + expect_stdout: "42" +} -- 2.34.1