From: Alex Lam S.L Date: Fri, 15 Dec 2017 08:33:19 +0000 (+0800) Subject: fix `reduce_vars` on `do...while` (#2596) X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=092d9affb829768e652f14c82080e27893e1f022;p=UglifyJS.git fix `reduce_vars` on `do...while` (#2596) --- diff --git a/lib/compress.js b/lib/compress.js index aaadcd10..0162fa4e 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -479,7 +479,17 @@ merge(Compressor.prototype, { } return true; } - if (node instanceof AST_DWLoop) { + if (node instanceof AST_Do) { + var saved_loop = in_loop; + in_loop = node; + push(); + node.body.walk(tw); + node.condition.walk(tw); + pop(); + in_loop = saved_loop; + return true; + } + if (node instanceof AST_While) { var saved_loop = in_loop; in_loop = node; push(); diff --git a/test/compress/reduce_vars.js b/test/compress/reduce_vars.js index 9ed9c974..394bb586 100644 --- a/test/compress/reduce_vars.js +++ b/test/compress/reduce_vars.js @@ -4867,3 +4867,35 @@ defun_single_use_loop: { "true", ] } + +do_while: { + options = { + evaluate: true, + reduce_vars: true, + } + input: { + function f(a) { + do { + (function() { + a && (c = "PASS"); + })(); + } while (a = 0); + } + var c = "FAIL"; + f(1); + console.log(c); + } + expect: { + function f(a) { + do { + (function() { + a && (c = "PASS"); + })(); + } while (a = 0); + } + var c = "FAIL"; + f(1); + console.log(c); + } + expect_stdout: "PASS" +}