From 3d71e97dd100fe150db3a5585d744e109bfa53ac Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Wed, 14 Oct 2020 16:39:35 +0100 Subject: [PATCH] fix corner cases in `braces` & `sequences` (#4221) fixes #4220 --- lib/compress.js | 2 +- lib/output.js | 4 ++-- test/compress/const.js | 48 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 51 insertions(+), 3 deletions(-) diff --git a/lib/compress.js b/lib/compress.js index 3e6218a0..e66331d4 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -2513,7 +2513,7 @@ merge(Compressor.prototype, { var line = block.body[i]; if (line instanceof AST_Var && declarations_only(line)) { decls.push(line); - } else if (stat) { + } else if (stat || line instanceof AST_Const) { return false; } else { stat = line; diff --git a/lib/output.js b/lib/output.js index 7077d6dd..70bd74be 100644 --- a/lib/output.js +++ b/lib/output.js @@ -990,7 +990,7 @@ function OutputStream(options) { /* -----[ if ]----- */ function make_then(self, output) { var b = self.body; - if (output.option("braces") + if (output.option("braces") && !(b instanceof AST_Const) || output.option("ie8") && b instanceof AST_Do) return make_block(b, output); // The squeezer replaces "block"-s that contain only a single @@ -1381,7 +1381,7 @@ function OutputStream(options) { }); function force_statement(stat, output) { - if (output.option("braces")) { + if (output.option("braces") && !(stat instanceof AST_Const)) { make_block(stat, output); } else if (!stat || stat instanceof AST_EmptyStatement) { output.force_semicolon(); diff --git a/test/compress/const.js b/test/compress/const.js index 8c04c6b1..cd951fff 100644 --- a/test/compress/const.js +++ b/test/compress/const.js @@ -1056,3 +1056,51 @@ issue_4216: { } expect_stdout: true } + +skip_braces: { + beautify = { + beautify: true, + braces: true, + } + input: { + if (console) + const a = 42; + else + const b = null; + console.log(typeof a, typeof b); + } + expect_exact: [ + "if (console) const a = 42; else const b = null;", + "", + "console.log(typeof a, typeof b);", + ] + expect_stdout: true +} + +issue_4220: { + options = { + collapse_vars: true, + conditionals: true, + sequences: true, + toplevel: true, + } + input: { + if (console) { + var o = console; + for (var k in o); + } else { + const a = 0; + } + console.log(typeof a); + } + expect: { + if (console) { + var o; + for (var k in console); + } else { + const a = 0; + } + console.log(typeof a); + } + expect_stdout: true +} -- 2.34.1