fix corner cases in conditionals & switches (#5545)
fixes #5543 fixes #5544
This commit is contained in:
@@ -1126,6 +1126,10 @@ var AST_Switch = DEFNODE("Switch", "expression", {
|
|||||||
$propdoc: {
|
$propdoc: {
|
||||||
expression: "[AST_Node] the `switch` “discriminant”"
|
expression: "[AST_Node] the `switch` “discriminant”"
|
||||||
},
|
},
|
||||||
|
_equals: function(node) {
|
||||||
|
return this.expression.equals(node.expression)
|
||||||
|
&& all_equals(this.body, node.body);
|
||||||
|
},
|
||||||
walk: function(visitor) {
|
walk: function(visitor) {
|
||||||
var node = this;
|
var node = this;
|
||||||
visitor.visit(node, function() {
|
visitor.visit(node, function() {
|
||||||
@@ -1157,6 +1161,10 @@ var AST_Case = DEFNODE("Case", "expression", {
|
|||||||
$propdoc: {
|
$propdoc: {
|
||||||
expression: "[AST_Node] the `case` expression"
|
expression: "[AST_Node] the `case` expression"
|
||||||
},
|
},
|
||||||
|
_equals: function(node) {
|
||||||
|
return this.expression.equals(node.expression)
|
||||||
|
&& all_equals(this.body, node.body);
|
||||||
|
},
|
||||||
walk: function(visitor) {
|
walk: function(visitor) {
|
||||||
var node = this;
|
var node = this;
|
||||||
visitor.visit(node, function() {
|
visitor.visit(node, function() {
|
||||||
|
|||||||
@@ -2177,3 +2177,69 @@ issue_5334_2: {
|
|||||||
}
|
}
|
||||||
expect_stdout: "PASS"
|
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"
|
||||||
|
}
|
||||||
|
|||||||
@@ -1608,3 +1608,83 @@ issue_5012: {
|
|||||||
}
|
}
|
||||||
expect_stdout: "PASS"
|
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"
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user