Skip to content

Commit

Permalink
fix corner cases in conditionals & switches (#5545)
Browse files Browse the repository at this point in the history
fixes #5543
fixes #5544
  • Loading branch information
alexlamsl committed Jul 7, 2022
1 parent d89f096 commit 3dcf098
Show file tree
Hide file tree
Showing 3 changed files with 154 additions and 0 deletions.
8 changes: 8 additions & 0 deletions lib/ast.js
Expand Up @@ -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() {
Expand Down Expand Up @@ -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() {
Expand Down
66 changes: 66 additions & 0 deletions test/compress/conditionals.js
Expand Up @@ -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"
}
80 changes: 80 additions & 0 deletions test/compress/switches.js
Expand Up @@ -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"
}

0 comments on commit 3dcf098

Please sign in to comment.