From b49e142a26094ccb0a6e9f597e7363ba02280eb4 Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Fri, 3 Mar 2017 00:54:41 +0800 Subject: [PATCH] disable do{...}while(false) optimisation (#1534) - fails to handle `break` in body fixes #1532 --- lib/compress.js | 2 +- test/compress/loops.js | 26 +++++++++++++++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/lib/compress.js b/lib/compress.js index 99235987..01fdeeae 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -2132,7 +2132,7 @@ merge(Compressor.prototype, { } } else { // self instanceof AST_Do - return self.body; + return self; } } if (self instanceof AST_While) { diff --git a/test/compress/loops.js b/test/compress/loops.js index ca05461c..e26dc79f 100644 --- a/test/compress/loops.js +++ b/test/compress/loops.js @@ -213,6 +213,30 @@ evaluate: { a(); for(;;) c(); - d(); + // rule disabled due to issue_1532 + do d(); while (false); + } +} + +issue_1532: { + options = { + evaluate: true, + loops: true, + } + input: { + function f(x, y) { + do { + if (x) break; + foo(); + } while (false); + } + } + expect: { + function f(x, y) { + do { + if (x) break; + foo(); + } while (false); + } } } -- 2.34.1