From 2088e1c19d97955b5582e08396fca8c7b7dadd83 Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Fri, 9 Feb 2018 06:54:37 +0800 Subject: [PATCH] fix AST corruption due to `collapse_vars` & `inline` (#2899) fixes #2898 --- lib/compress.js | 1 + test/compress/functions.js | 30 ++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/lib/compress.js b/lib/compress.js index e70af436..282ab780 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -4379,6 +4379,7 @@ merge(Compressor.prototype, { && !self.pure && !fn.contains_this() && can_inject_symbols()) { + fn._squeezed = true; return make_sequence(self, flatten_fn()).optimize(compressor); } if (compressor.option("side_effects") && all(fn.body, is_empty)) { diff --git a/test/compress/functions.js b/test/compress/functions.js index 87328820..a964f104 100644 --- a/test/compress/functions.js +++ b/test/compress/functions.js @@ -1989,3 +1989,33 @@ issue_2783: { } expect_stdout: "PASS" } + +issue_2898: { + options = { + collapse_vars: true, + inline: true, + reduce_vars: true, + sequences: true, + unused: true, + } + input: { + var c = 0; + (function() { + while (f()); + function f() { + var b = (c = 1 + c, void (c = 1 + c)); + b && b[0]; + } + })(); + console.log(c); + } + expect: { + var c = 0; + (function() { + while (b = void 0, void ((b = void (c = 1 + (c = 1 + c))) && b[0])); + var b; + })(), + console.log(c); + } + expect_stdout: "2" +} -- 2.34.1