From 3dcf098468e08e9809079e1d9b5c68ac7e2ea980 Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Thu, 7 Jul 2022 07:59:06 +0100 Subject: [PATCH] fix corner cases in `conditionals` & `switches` (#5545) fixes #5543 fixes #5544 --- lib/ast.js | 8 ++++ test/compress/conditionals.js | 66 +++++++++++++++++++++++++++++ test/compress/switches.js | 80 +++++++++++++++++++++++++++++++++++ 3 files changed, 154 insertions(+) diff --git a/lib/ast.js b/lib/ast.js index b82bbbb1..aa49a276 100644 --- a/lib/ast.js +++ b/lib/ast.js @@ -1126,6 +1126,10 @@ var AST_Switch = DEFNODE("Switch", "expression", { $propdoc: { expression: "[AST_Node] the `switch` “discriminant”" }, + _equals: function(node) { + return this.expression.equals(node.expression) + && all_equals(this.body, node.body); + }, walk: function(visitor) { var node = this; visitor.visit(node, function() { @@ -1157,6 +1161,10 @@ var AST_Case = DEFNODE("Case", "expression", { $propdoc: { expression: "[AST_Node] the `case` expression" }, + _equals: function(node) { + return this.expression.equals(node.expression) + && all_equals(this.body, node.body); + }, walk: function(visitor) { var node = this; visitor.visit(node, function() { diff --git a/test/compress/conditionals.js b/test/compress/conditionals.js index 0d6a8181..289ad6d8 100644 --- a/test/compress/conditionals.js +++ b/test/compress/conditionals.js @@ -2177,3 +2177,69 @@ issue_5334_2: { } expect_stdout: "PASS" } + +issue_5544_1: { + options = { + conditionals: true, + } + input: { + var a; + if (a) + switch (42) { + case console.log("FAIL"): + case console: + } + else + switch (false) { + case console.log("PASS"): + case console: + } + } + expect: { + var a; + if (a) + switch (42) { + case console.log("FAIL"): + case console: + } + else + switch (false) { + case console.log("PASS"): + case console: + } + } + expect_stdout: "PASS" +} + +issue_5544_2: { + options = { + conditionals: true, + } + input: { + var a; + if (a) + switch (42) { + case console.log("FAIL"): + case console: + } + else + switch (42) { + case console.log("PASS"): + case console: + } + } + expect: { + var a; + if (a) + switch (42) { + case console.log("FAIL"): + case console: + } + else + switch (42) { + case console.log("PASS"): + case console: + } + } + expect_stdout: "PASS" +} diff --git a/test/compress/switches.js b/test/compress/switches.js index 3c43612e..0502db78 100644 --- a/test/compress/switches.js +++ b/test/compress/switches.js @@ -1608,3 +1608,83 @@ issue_5012: { } expect_stdout: "PASS" } + +issue_5543_1: { + options = { + dead_code: true, + switches: true, + } + input: { + var a; + switch (a) { + default: + switch (42) { + case a: + case console.log("PASS"): + } + break; + case null: + switch (false) { + case a: + case console.log("FAIL"): + } + } + } + expect: { + var a; + switch (a) { + default: + switch (42) { + case a: + case console.log("PASS"): + } + break; + case null: + switch (false) { + case a: + case console.log("FAIL"): + } + } + } + expect_stdout: "PASS" +} + +issue_5543_2: { + options = { + dead_code: true, + switches: true, + } + input: { + var a; + switch (a) { + default: + switch (42) { + case a: + case console.log("PASS"): + } + break; + case null: + switch (42) { + case a: + case console.log("FAIL"): + } + } + } + expect: { + var a; + switch (a) { + default: + switch (42) { + case a: + case console.log("PASS"): + } + break; + case null: + switch (42) { + case a: + case console.log("FAIL"): + } + } + } + expect_stdout: "PASS" +}