diff options
author | Alex Lam S.L <alexlamsl@gmail.com> | 2017-06-15 12:14:16 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-06-15 12:14:16 +0800 |
commit | b85a358deb70615596bf5ffc668e2ac282453f88 (patch) | |
tree | 92efbc378d99b3399eb211c053309c3e1eb37b80 | |
parent | 43697958f368b41aee3cd704473ad6c1ea53ae8c (diff) | |
download | tracifyjs-b85a358deb70615596bf5ffc668e2ac282453f88.tar.gz tracifyjs-b85a358deb70615596bf5ffc668e2ac282453f88.zip |
suppress `inline` of `this` (#2103)
fixes #2101
-rw-r--r-- | lib/compress.js | 7 | ||||
-rw-r--r-- | test/compress/functions.js | 49 |
2 files changed, 55 insertions, 1 deletions
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" +} |