From b85a358deb70615596bf5ffc668e2ac282453f88 Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Thu, 15 Jun 2017 12:14:16 +0800 Subject: [PATCH] suppress `inline` of `this` (#2103) fixes #2101 --- lib/compress.js | 7 +++++- test/compress/functions.js | 49 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 1 deletion(-) diff --git a/lib/compress.js b/lib/compress.js index 4d768781..f5989341 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -3209,10 +3209,15 @@ merge(Compressor.prototype, { if (!value) return make_node(AST_Undefined, self); value.walk(new TreeWalker(function(node) { if (value === self) return true; - if (node instanceof AST_SymbolRef && exp.variables.has(node.name)) { + if (node instanceof AST_SymbolRef && matches(node.scope.find_variable(node)) + || node instanceof AST_This && matches(node)) { value = self; return true; } + + function matches(ref) { + return ref && ref.scope.parent_scope === fn.parent_scope; + } })); if (value !== self) value = best_of(compressor, value, self); } else { diff --git a/test/compress/functions.js b/test/compress/functions.js index 909a57dd..c2794f26 100644 --- a/test/compress/functions.js +++ b/test/compress/functions.js @@ -365,3 +365,52 @@ issue_2097: { } expect_stdout: "1" } + +issue_2101: { + options = { + inline: true, + } + input: { + a = {}; + console.log(function() { + return function() { + return this.a; + }(); + }() === function() { + return a; + }()); + } + expect: { + a = {}; + console.log(function() { + return this.a; + }() === a); + } + expect_stdout: "true" +} + +inner_ref: { + options = { + inline: true, + unused: true, + } + input: { + console.log(function(a) { + return function() { + return a; + }(); + }(1), function(a) { + return function(a) { + return a; + }(); + }(2)); + } + expect: { + console.log(function(a) { + return a; + }(1), function(a) { + return a; + }()); + } + expect_stdout: "1 undefined" +} -- 2.34.1