From 0809699bdc7b1c249c7bbe02924a4a861aff8bea Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Mon, 12 Feb 2018 23:28:28 +0800 Subject: [PATCH] simplify `do-while` into `for` (#2907) fixes #2904 --- lib/compress.js | 7 +++++++ test/compress/loops.js | 17 +++++++++++++++++ test/compress/reduce_vars.js | 12 +++--------- 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/lib/compress.js b/lib/compress.js index 282ab780..2b796dcc 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -3672,6 +3672,13 @@ merge(Compressor.prototype, { ] }).optimize(compressor); } + if (self.body instanceof AST_SimpleStatement) return make_node(AST_For, self, { + condition: make_sequence(self.condition, [ + self.body.body, + self.condition + ]), + body: make_node(AST_EmptyStatement, self) + }).optimize(compressor); return self; }); diff --git a/test/compress/loops.js b/test/compress/loops.js index a6ebd359..625b552d 100644 --- a/test/compress/loops.js +++ b/test/compress/loops.js @@ -605,3 +605,20 @@ issue_2740_5: { } expect_stdout: "0 undefined" } + +issue_2904: { + options = { + join_vars: true, + loops: true, + } + input: { + var a = 1; + do { + console.log(a); + } while (--a); + } + expect: { + for (var a = 1; console.log(a), --a;); + } + expect_stdout: "1" +} diff --git a/test/compress/reduce_vars.js b/test/compress/reduce_vars.js index c0148204..f916e54b 100644 --- a/test/compress/reduce_vars.js +++ b/test/compress/reduce_vars.js @@ -1178,9 +1178,7 @@ toplevel_on_loops_1: { console.log("bar:", --x); } var x = 3; - do - bar(); - while (x); + for (;bar(), x;); } expect_stdout: true } @@ -1208,9 +1206,7 @@ toplevel_off_loops_1: { console.log("bar:", --x); } var x = 3; - do - bar(); - while (x); + for (;bar(), x;); } expect_stdout: true } @@ -1265,9 +1261,7 @@ toplevel_off_loops_2: { console.log("bar:"); } var x = 3; - do - bar(); - while (x); + for (;bar(), x;); } } -- 2.34.1