always keep declarations found in unreachable code

a few more tests and some cleanups.
This commit is contained in:
Mihai Bazon
2012-09-07 15:18:32 +03:00
parent b77574ea1c
commit 919b2733ab
5 changed files with 226 additions and 49 deletions

View File

@@ -0,0 +1,74 @@
ifs_1: {
options = {
conditionals: true
};
input: {
if (foo) bar();
if (!foo); else bar();
if (foo); else bar();
if (foo); else;
}
expect: {
foo&&bar();
foo&&bar();
foo||bar();
foo;
}
}
ifs_2: {
options = {
conditionals: true
};
input: {
if (foo) {
x();
} else if (bar) {
y();
} else if (baz) {
z();
}
if (foo) {
x();
} else if (bar) {
y();
} else if (baz) {
z();
} else {
t();
}
}
expect: {
foo ? x() : bar ? y() : baz && z();
foo ? x() : bar ? y() : baz ? z() : t();
}
}
ifs_3_should_warn: {
options = {
conditionals : true,
dead_code : true,
evaluate : true,
booleans : true
};
input: {
if (x && !(x + "1") && y) { // 1
var qq;
foo();
} else {
bar();
}
if (x || !!(x + "1") || y) { // 2
foo();
} else {
var jj;
bar();
}
}
expect: {
var qq; bar(); // 1
var jj; foo(); // 2
}
}

View File

@@ -57,3 +57,33 @@ dead_code_2_should_warn: {
}
}
}
dead_code_constant_boolean_should_warn_more: {
options = {
dead_code : true,
loops : true,
booleans : true,
conditionals : true,
evaluate : true
};
input: {
while (!((foo && bar) || (x + "0"))) {
console.log("unreachable");
var foo;
function bar() {}
}
for (var x = 10; x && (y || x) && (!typeof x); ++x) {
asdf();
foo();
var moo;
}
}
expect: {
var foo;
function bar() {}
// nothing for the while
// as for the for, it should keep:
var x = 10;
var moo;
}
}

View File

@@ -119,8 +119,10 @@ function parse_test(file) {
})
);
var stat = node.body;
if (stat instanceof U.AST_BlockStatement && stat.body.length == 1)
stat = stat.body[0];
if (stat instanceof U.AST_BlockStatement) {
if (stat.body.length == 1) stat = stat.body[0];
else if (stat.body.length == 0) stat = new U.AST_EmptyStatement();
}
test[node.label.name] = stat;
return true;
}