From e773f0392769794173358b362a645facb51b2ad2 Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Sat, 3 Feb 2018 01:33:09 +0800 Subject: [PATCH] fix assignment logic in `reduce_vars` (#2872) fixes #2869 --- lib/compress.js | 12 ++++++------ test/compress/reduce_vars.js | 26 ++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/lib/compress.js b/lib/compress.js index 832f64f2..77636cb2 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -710,19 +710,19 @@ merge(Compressor.prototype, { def(AST_VarDef, function(tw, descend) { var node = this; var d = node.name.definition(); - if (safe_to_assign(tw, d, node.value)) { - if (node.value) { + if (node.value) { + if (safe_to_assign(tw, d, node.value)) { d.fixed = function() { return node.value; }; tw.loop_ids[d.id] = tw.in_loop; mark(tw, d, false); descend(); + mark(tw, d, true); + return true; + } else { + d.fixed = false; } - mark(tw, d, true); - return true; - } else if (node.value) { - d.fixed = false; } }); def(AST_While, function(tw) { diff --git a/test/compress/reduce_vars.js b/test/compress/reduce_vars.js index 761af9e2..c0148204 100644 --- a/test/compress/reduce_vars.js +++ b/test/compress/reduce_vars.js @@ -5507,3 +5507,29 @@ issue_2860_2: { } expect_stdout: "1" } + +issue_2869: { + options = { + evaluate: true, + reduce_vars: true, + } + input: { + var c = "FAIL"; + (function f(a) { + var a; + if (!f) a = 0; + if (a) c = "PASS"; + })(1); + console.log(c); + } + expect: { + var c = "FAIL"; + (function f(a) { + var a; + if (!f) a = 0; + if (a) c = "PASS"; + })(1); + console.log(c); + } + expect_stdout: "PASS" +} -- 2.34.1