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" +}