diff options
-rw-r--r-- | lib/compress.js | 16 | ||||
-rw-r--r-- | test/compress/loops.js | 29 |
2 files changed, 35 insertions, 10 deletions
diff --git a/lib/compress.js b/lib/compress.js index 2ba2982e..ee28ee14 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -1813,8 +1813,14 @@ merge(Compressor.prototype, { extract_declarations_from_unreachable_code(compressor, self.body, a); return make_node(AST_BlockStatement, self, { body: a }); } + } else { + // self instanceof AST_Do + return self.body; } } + if (self instanceof AST_While) { + return make_node(AST_For, self, self).transform(compressor); + } return self; }); @@ -1863,16 +1869,6 @@ merge(Compressor.prototype, { } }; - OPT(AST_While, function(self, compressor) { - if (!compressor.option("loops")) return self; - self = AST_DWLoop.prototype.optimize.call(self, compressor); - if (self instanceof AST_While) { - if_break_in_loop(self, compressor); - self = make_node(AST_For, self, self).transform(compressor); - } - return self; - }); - OPT(AST_For, function(self, compressor){ var cond = self.condition; if (cond) { diff --git a/test/compress/loops.js b/test/compress/loops.js index 78f618aa..ca05461c 100644 --- a/test/compress/loops.js +++ b/test/compress/loops.js @@ -187,3 +187,32 @@ keep_collapse_const_in_own_block_scope_2: { console.log(c); } } + +evaluate: { + options = { + loops: true, + dead_code: true, + evaluate: true, + }; + input: { + while (true) { + a(); + } + while (false) { + b(); + } + do { + c(); + } while (true); + do { + d(); + } while (false); + } + expect: { + for(;;) + a(); + for(;;) + c(); + d(); + } +} |