aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Lam S.L <alexlamsl@gmail.com>2017-03-06 17:31:35 +0800
committerGitHub <noreply@github.com>2017-03-06 17:31:35 +0800
commita9fc9ddc3371a2ba051bca849db3c4b73983f24d (patch)
tree5d5d4b2d1c60a5a52bf080b7fb3ba546effe91c9
parenta5d62a3fc6dcb334a2172bfbfdc4e25efe4367da (diff)
downloadtracifyjs-a9fc9ddc3371a2ba051bca849db3c4b73983f24d.tar.gz
tracifyjs-a9fc9ddc3371a2ba051bca849db3c4b73983f24d.zip
suppress semicolons after do/while (#1556)
- unless both `beautify` & `screw-ie8` are enabled - deprecate workaround for if-do-while-else fixes #186
-rw-r--r--lib/output.js13
-rw-r--r--test/compress/loops.js156
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}'
+}