From a9fc9ddc3371a2ba051bca849db3c4b73983f24d Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Mon, 6 Mar 2017 17:31:35 +0800 Subject: [PATCH] suppress semicolons after do/while (#1556) - unless both `beautify` & `screw-ie8` are enabled - deprecate workaround for if-do-while-else fixes #186 --- lib/output.js | 13 +--- test/compress/loops.js | 156 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 159 insertions(+), 10 deletions(-) diff --git a/lib/output.js b/lib/output.js index 10fed135..7e16644d 100644 --- a/lib/output.js +++ b/lib/output.js @@ -784,7 +784,9 @@ function OutputStream(options) { output.with_parens(function(){ self.condition.print(output); }); - output.semicolon(); + if (output.option("beautify") && output.option("screw_ie8")) { + output.semicolon(); + } }); DEFPRINT(AST_While, function(self, output){ output.print("while"); @@ -917,15 +919,6 @@ function OutputStream(options) { // adds the block brackets if needed. if (!self.body) return output.force_semicolon(); - if (self.body instanceof AST_Do) { - // Unconditionally use the if/do-while workaround for all browsers. - // https://github.com/mishoo/UglifyJS/issues/#issue/57 IE - // croaks with "syntax error" on code like this: if (foo) - // do ... while(cond); else ... we need block brackets - // around do/while - make_block(self.body, output); - return; - } var b = self.body; while (true) { if (b instanceof AST_If) { diff --git a/test/compress/loops.js b/test/compress/loops.js index e26dc79f..2d04e235 100644 --- a/test/compress/loops.js +++ b/test/compress/loops.js @@ -240,3 +240,159 @@ issue_1532: { } } } + +issue_186: { + beautify = { + beautify: false, + screw_ie8: true, + } + input: { + var x = 3; + if (foo()) + do + do + alert(x); + while (--x); + while (x); + else + bar(); + } + expect_exact: 'var x=3;if(foo())do do alert(x);while(--x)while(x)else bar();' +} + +issue_186_ie8: { + beautify = { + beautify: false, + screw_ie8: false, + } + input: { + var x = 3; + if (foo()) + do + do + alert(x); + while (--x); + while (x); + else + bar(); + } + expect_exact: 'var x=3;if(foo())do do alert(x);while(--x)while(x)else bar();' +} + +issue_186_beautify: { + beautify = { + beautify: true, + screw_ie8: true, + } + input: { + var x = 3; + if (foo()) + do + do + alert(x); + while (--x); + while (x); + else + bar(); + } + expect_exact: 'var x = 3;\n\nif (foo()) do do alert(x); while (--x); while (x); else bar();' +} + +issue_186_beautify_ie8: { + beautify = { + beautify: true, + screw_ie8: false, + } + input: { + var x = 3; + if (foo()) + do + do + alert(x); + while (--x); + while (x); + else + bar(); + } + expect_exact: 'var x = 3;\n\nif (foo()) do do alert(x); while (--x) while (x) else bar();' +} + +issue_186_bracketize: { + beautify = { + beautify: false, + bracketize: true, + screw_ie8: true, + } + input: { + var x = 3; + if (foo()) + do + do + alert(x); + while (--x); + while (x); + else + bar(); + } + expect_exact: 'var x=3;if(foo()){do{do{alert(x)}while(--x)}while(x)}else{bar()}' +} + +issue_186_bracketize_ie8: { + beautify = { + beautify: false, + bracketize: true, + screw_ie8: false, + } + input: { + var x = 3; + if (foo()) + do + do + alert(x); + while (--x); + while (x); + else + bar(); + } + expect_exact: 'var x=3;if(foo()){do{do{alert(x)}while(--x)}while(x)}else{bar()}' +} + +issue_186_beautify_bracketize: { + beautify = { + beautify: true, + bracketize: true, + screw_ie8: true, + } + input: { + var x = 3; + if (foo()) + do + do + alert(x); + while (--x); + while (x); + else + bar(); + } + expect_exact: 'var x = 3;\n\nif (foo()) {\n do {\n do {\n alert(x);\n } while (--x);\n } while (x);\n} else {\n bar();\n}' +} + +issue_186_beautify_bracketize_ie8: { + beautify = { + beautify: true, + bracketize: true, + screw_ie8: false, + } + input: { + var x = 3; + if (foo()) + do + do + alert(x); + while (--x); + while (x); + else + bar(); + } + expect_exact: 'var x = 3;\n\nif (foo()) {\n do {\n do {\n alert(x);\n } while (--x)\n } while (x)\n} else {\n bar();\n}' +} -- 2.34.1