diff options
author | Alex Lam S.L <alexlamsl@gmail.com> | 2017-03-11 03:34:55 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-03-11 03:34:55 +0800 |
commit | d9344f30b83ecdfc8310ff43b9361c67cc85ec3e (patch) | |
tree | 0113b3b7703a4abee12b566721e77f695dede971 | |
parent | be80f7e706cd6eb1c5f06e433804fda589a8968a (diff) | |
download | tracifyjs-d9344f30b83ecdfc8310ff43b9361c67cc85ec3e.tar.gz tracifyjs-d9344f30b83ecdfc8310ff43b9361c67cc85ec3e.zip |
disallow parameter substitution for named IIFEs (#1596)
Self-referenced function has non-fixed values assigned to its parameters.
Let `unused` & `!keep_fnames` do the scanning, then apply `reduce_vars` only to unnamed functions.
fixes #1595
-rw-r--r-- | lib/compress.js | 1 | ||||
-rw-r--r-- | test/compress/reduce_vars.js | 75 |
2 files changed, 76 insertions, 0 deletions
diff --git a/lib/compress.js b/lib/compress.js index 3964636f..7302f5b9 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -279,6 +279,7 @@ merge(Compressor.prototype, { } var iife; if (node instanceof AST_Function + && !node.name && (iife = tw.parent()) instanceof AST_Call && iife.expression === node) { // Virtually turn IIFE parameters into variable definitions: diff --git a/test/compress/reduce_vars.js b/test/compress/reduce_vars.js index 734ce4ed..a5ab59f9 100644 --- a/test/compress/reduce_vars.js +++ b/test/compress/reduce_vars.js @@ -1252,3 +1252,78 @@ iife_func_side_effects: { })(x(), 0, z()); } } + +issue_1595_1: { + options = { + evaluate: true, + reduce_vars: true, + unused: true, + } + input: { + (function f(a) { + return f(a + 1); + })(2); + } + expect: { + (function f(a) { + return f(a + 1); + })(2); + } +} + +issue_1595_2: { + options = { + evaluate: true, + reduce_vars: true, + unused: true, + } + input: { + (function f(a) { + return g(a + 1); + })(2); + } + expect: { + (function(a) { + return g(a + 1); + })(2); + } +} + +issue_1595_3: { + options = { + evaluate: true, + passes: 2, + reduce_vars: true, + unused: true, + } + input: { + (function f(a) { + return g(a + 1); + })(2); + } + expect: { + (function(a) { + return g(3); + })(); + } +} + +issue_1595_4: { + options = { + evaluate: true, + reduce_vars: true, + unused: true, + } + input: { + (function iife(a, b, c) { + console.log(a, b, c); + if (a) iife(a - 1, b, c); + })(3, 4, 5); + } + expect: { + (function iife(a, b, c) { + console.log(a, b, c); + if (a) iife(a - 1, b, c); + })(3, 4, 5); + } +} |