`AST_Try` is an `AST_Block`, so besides try block we also need to inspect catch and finally blocks for possible side effects. Also extend this functionality to handle `AST_If` and `AST_LabeledStatement` while we are at it. fixes #1673
128 lines
2.4 KiB
JavaScript
128 lines
2.4 KiB
JavaScript
side_effects_catch: {
|
|
options = {
|
|
reduce_vars: true,
|
|
side_effects: true,
|
|
unused: true,
|
|
}
|
|
input: {
|
|
function f() {
|
|
function g() {
|
|
try {
|
|
throw 0;
|
|
} catch (e) {
|
|
console.log("PASS");
|
|
}
|
|
}
|
|
g();
|
|
}
|
|
f();
|
|
}
|
|
expect: {
|
|
function f() {
|
|
(function() {
|
|
try {
|
|
throw 0;
|
|
} catch (e) {
|
|
console.log("PASS");
|
|
}
|
|
})();
|
|
}
|
|
f();
|
|
}
|
|
expect_stdout: "PASS"
|
|
}
|
|
|
|
side_effects_else: {
|
|
options = {
|
|
reduce_vars: true,
|
|
side_effects: true,
|
|
unused: true,
|
|
}
|
|
input: {
|
|
function f(x) {
|
|
function g() {
|
|
if (x);
|
|
else console.log("PASS");
|
|
}
|
|
g();
|
|
}
|
|
f(0);
|
|
}
|
|
expect: {
|
|
function f(x) {
|
|
(function() {
|
|
if (x);
|
|
else console.log("PASS");
|
|
})();
|
|
}
|
|
f(0);
|
|
}
|
|
expect_stdout: "PASS"
|
|
}
|
|
|
|
side_effects_finally: {
|
|
options = {
|
|
reduce_vars: true,
|
|
side_effects: true,
|
|
unused: true,
|
|
}
|
|
input: {
|
|
function f() {
|
|
function g() {
|
|
try {
|
|
} catch (e) {
|
|
} finally {
|
|
console.log("PASS");
|
|
}
|
|
}
|
|
g();
|
|
}
|
|
f();
|
|
}
|
|
expect: {
|
|
function f() {
|
|
(function() {
|
|
try {
|
|
} catch (e) {
|
|
} finally {
|
|
console.log("PASS");
|
|
}
|
|
})();
|
|
}
|
|
f();
|
|
}
|
|
expect_stdout: "PASS"
|
|
}
|
|
|
|
side_effects_label: {
|
|
options = {
|
|
reduce_vars: true,
|
|
side_effects: true,
|
|
unused: true,
|
|
}
|
|
input: {
|
|
function f(x) {
|
|
function g() {
|
|
L: {
|
|
console.log("PASS");
|
|
break L;
|
|
}
|
|
}
|
|
g();
|
|
}
|
|
f(0);
|
|
}
|
|
expect: {
|
|
function f(x) {
|
|
(function() {
|
|
L: {
|
|
console.log("PASS");
|
|
break L;
|
|
}
|
|
})();
|
|
}
|
|
f(0);
|
|
}
|
|
expect_stdout: "PASS"
|
|
}
|