diff options
author | Alex Lam S.L <alexlamsl@gmail.com> | 2017-12-08 01:50:38 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-12-08 01:50:38 +0800 |
commit | e20935c3f2a03779b15ad225ae4616a1d80c2ec5 (patch) | |
tree | 116ddfd714d75af3ed0ebfdd7015448f11200935 | |
parent | 3e34f62a1c48ab45db34cfb08d8dd2118c5780f0 (diff) | |
download | tracifyjs-e20935c3f2a03779b15ad225ae4616a1d80c2ec5.tar.gz tracifyjs-e20935c3f2a03779b15ad225ae4616a1d80c2ec5.zip |
fix escape analysis for `AST_Conditional` & `AST_Sequence` (#2563)
fixes #2560
-rw-r--r-- | lib/compress.js | 4 | ||||
-rw-r--r-- | test/compress/reduce_vars.js | 77 |
2 files changed, 80 insertions, 1 deletions
diff --git a/lib/compress.js b/lib/compress.js index e59dce63..c80192dc 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -656,7 +656,9 @@ merge(Compressor.prototype, { || parent instanceof AST_VarDef && node === parent.value) { d.escaped = true; return; - } else if (parent instanceof AST_Array) { + } else if (parent instanceof AST_Array + || parent instanceof AST_Conditional && node !== parent.condition + || parent instanceof AST_Sequence && node === parent.tail_node()) { mark_escaped(d, scope, parent, parent, level + 1); } else if (parent instanceof AST_ObjectKeyVal && node === parent.value) { var obj = tw.parent(level + 1); diff --git a/test/compress/reduce_vars.js b/test/compress/reduce_vars.js index 4a098f78..9a66d1cb 100644 --- a/test/compress/reduce_vars.js +++ b/test/compress/reduce_vars.js @@ -4544,3 +4544,80 @@ issue_2455: { } } } + +issue_2560_1: { + options = { + reduce_funcs: true, + reduce_vars: true, + toplevel: true, + unused: true, + } + input: { + function main() { + var thing = baz(); + if (thing !== (thing = baz())) + console.log("FAIL"); + else + console.log("PASS"); + } + function baz(s) { + return s ? foo : bar; + } + function foo() {} + function bar() {} + main(); + } + expect: { + function baz(s) { + return s ? foo : bar; + } + function foo() {} + function bar() {} + (function() { + var thing = baz(); + if (thing !== (thing = baz())) + console.log("FAIL"); + else + console.log("PASS"); + })(); + } + expect_stdout: "PASS" +} + +issue_2560_2: { + options = { + reduce_funcs: true, + reduce_vars: true, + toplevel: true, + unused: true, + } + input: { + function main() { + var thing = baz(); + if (thing !== (thing = baz())) + console.log("FAIL"); + else + console.log("PASS"); + } + function baz() { + return foo, bar; + } + function foo() {} + function bar() {} + main(); + } + expect: { + function baz() { + return function() {}, bar; + } + function bar() {} + (function() { + var thing = baz(); + if (thing !== (thing = baz())) + console.log("FAIL"); + else + console.log("PASS"); + })(); + } + expect_stdout: "PASS" +} |