diff options
author | Alex Lam S.L <alexlamsl@gmail.com> | 2017-12-15 16:33:19 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-12-15 16:33:19 +0800 |
commit | 092d9affb829768e652f14c82080e27893e1f022 (patch) | |
tree | 9394317a8202e43deb73301b0c20b5712934f472 | |
parent | 8f681b1d1721e931852be48720d26ba052eac96c (diff) | |
download | tracifyjs-092d9affb829768e652f14c82080e27893e1f022.tar.gz tracifyjs-092d9affb829768e652f14c82080e27893e1f022.zip |
fix `reduce_vars` on `do...while` (#2596)
-rw-r--r-- | lib/compress.js | 12 | ||||
-rw-r--r-- | test/compress/reduce_vars.js | 32 |
2 files changed, 43 insertions, 1 deletions
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" +} |