fix corner case in collapse_vars (#3582)

fixes #3581
This commit is contained in:
Alex Lam S.L 2019-11-13 16:45:16 +08:00 committed by GitHub
parent d6fd18d0b0
commit fe65ce9658
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 65 additions and 1 deletions

View File

@ -1090,7 +1090,7 @@ merge(Compressor.prototype, {
scope = node; scope = node;
break; break;
} else if (node instanceof AST_Try) { } else if (node instanceof AST_Try) {
in_try = true; in_try = node;
} }
} while (node = compressor.parent(level++)); } while (node = compressor.parent(level++));
} }
@ -1321,6 +1321,10 @@ merge(Compressor.prototype, {
function is_last_node(node, parent) { function is_last_node(node, parent) {
if (node instanceof AST_Call) return true; if (node instanceof AST_Call) return true;
if (node instanceof AST_Exit) { if (node instanceof AST_Exit) {
if (in_try) {
if (in_try.bfinally) return true;
if (in_try.bcatch && node instanceof AST_Throw) return true;
}
return side_effects || lhs instanceof AST_PropAccess || may_modify(lhs); return side_effects || lhs instanceof AST_PropAccess || may_modify(lhs);
} }
if (node instanceof AST_Function) { if (node instanceof AST_Function) {

View File

@ -6468,3 +6468,63 @@ issue_3573: {
} }
expect_stdout: "1" expect_stdout: "1"
} }
issue_3581_1: {
options = {
collapse_vars: true,
}
input: {
var a = "PASS", b = "FAIL";
try {
b = "PASS";
if (a) throw 0;
b = 1 + b;
a = "FAIL";
} catch (e) {}
console.log(a, b);
}
expect: {
var a = "PASS", b = "FAIL";
try {
b = "PASS";
if (a) throw 0;
b = 1 + b;
a = "FAIL";
} catch (e) {}
console.log(a, b);
}
expect_stdout: "PASS PASS"
}
issue_3581_2: {
options = {
collapse_vars: true,
}
input: {
(function() {
var a = "PASS", b = "FAIL";
try {
b = "PASS";
if (a) return;
b = 1 + b;
a = "FAIL";
} finally {
console.log(a, b);
}
})();
}
expect: {
(function() {
var a = "PASS", b = "FAIL";
try {
b = "PASS";
if (a) return;
b = 1 + b;
a = "FAIL";
} finally {
console.log(a, b);
}
})();
}
expect_stdout: "PASS PASS"
}