diff options
author | Alex Lam S.L <alexlamsl@gmail.com> | 2017-11-29 13:31:41 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-11-29 13:31:41 +0800 |
commit | bc5047c1e70594ea2fa8e747945a577298715926 (patch) | |
tree | 8109b4339adcf09625cc61efb0a5527f35f40a96 | |
parent | 206a54a7461b76683d690fd7016943fcb461a4fa (diff) | |
download | tracifyjs-bc5047c1e70594ea2fa8e747945a577298715926.tar.gz tracifyjs-bc5047c1e70594ea2fa8e747945a577298715926.zip |
fix `inline` on nested substitutions (#2533)
fixes #2531
-rw-r--r-- | lib/compress.js | 4 | ||||
-rw-r--r-- | test/compress/functions.js | 99 |
2 files changed, 103 insertions, 0 deletions
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" +} |