From: Alex Lam S.L Date: Wed, 29 Nov 2017 05:31:41 +0000 (+0800) Subject: fix `inline` on nested substitutions (#2533) X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=bc5047c1e70594ea2fa8e747945a577298715926;p=UglifyJS.git fix `inline` on nested substitutions (#2533) fixes #2531 --- diff --git a/lib/compress.js b/lib/compress.js index 5b26de8b..dc761948 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -2268,6 +2268,10 @@ merge(Compressor.prototype, { self.walk(new TreeWalker(function(node) { if (!result) return true; if (node instanceof AST_SymbolRef) { + if (self.inlined) { + result = false; + return true; + } var def = node.definition(); if (member(def, self.enclosed) && !self.variables.has(def.name)) { diff --git a/test/compress/functions.js b/test/compress/functions.js index 3e5562a2..3ecb4bc3 100644 --- a/test/compress/functions.js +++ b/test/compress/functions.js @@ -554,3 +554,102 @@ issue_2428: { "PASS", ] } + +issue_2531_1: { + options = { + evaluate: true, + inline: true, + reduce_funcs: true, + reduce_vars: true, + unused: true, + } + input: { + function outer() { + function inner(value) { + function closure() { + return value; + } + return function() { + return closure(); + }; + } + return inner("Hello"); + } + console.log("Greeting:", outer()()); + } + expect: { + function outer() { + return function(value) { + return function() { + return value; + }; + }("Hello"); + } + console.log("Greeting:", outer()()); + } + expect_stdout: "Greeting: Hello" +} + +issue_2531_2: { + options = { + evaluate: true, + inline: true, + passes: 2, + reduce_funcs: true, + reduce_vars: true, + unused: true, + } + input: { + function outer() { + function inner(value) { + function closure() { + return value; + } + return function() { + return closure(); + }; + } + return inner("Hello"); + } + console.log("Greeting:", outer()()); + } + expect: { + function outer() { + return function() { + return "Hello"; + }; + } + console.log("Greeting:", outer()()); + } + expect_stdout: "Greeting: Hello" +} + +issue_2531_3: { + options = { + evaluate: true, + inline: true, + passes: 2, + reduce_funcs: true, + reduce_vars: true, + toplevel: true, + unused: true, + } + input: { + function outer() { + function inner(value) { + function closure() { + return value; + } + return function() { + return closure(); + }; + } + return inner("Hello"); + } + console.log("Greeting:", outer()()); + } + expect: { + console.log("Greeting:", "Hello"); + } + expect_stdout: "Greeting: Hello" +}