From: Alex Lam S.L Date: Thu, 15 Jun 2017 04:14:16 +0000 (+0800) Subject: suppress `inline` of `this` (#2103) X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=b85a358deb70615596bf5ffc668e2ac282453f88;p=UglifyJS.git suppress `inline` of `this` (#2103) fixes #2101 --- 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" +}